I think I have found a bug that has taken ages to debug, when creating a relation to a page the page has to be the first argument in the has_one array ie:
static $has_one =array( 'SmallGroupPage' => 'SmallGroupPage', 'GroupImage' => 'Image', 'CalEventPage' => 'SiteTree' );
is different to
static $has_one =array( 'GroupImage' => 'Image', 'CalEventPage' => 'SiteTree', 'SmallGroupPage' => 'SmallGroupPage' );
It doesn't add the page relation to the page that it was created on unless the SmallGroupPage value is the first. Also the SimpleTreeDropdownField only worked when the CalEventPage wasn't the first page relation in the array.
I have got it working now but I wasn't aware that the order of the relationships had any relevance, oh I might point out that it worked when I used a ComplexTableField (I didn't test the dropdown box though).