The render method worked fine, but there weren't some values on those controls. The cause of this was that the OnInit, and the OnLoad event's weren't firing.
After some debugging and analyzing the control tree in /trace.axd, I saw there were no controls in the main control.
The reason? I'd put a
[ParseChildren(ChildrenAsProperties = true,
DefaultProperty = "Groups")]
attibute on the main control, and all those controls were added to a ListA dirty line in the main control OnInit fixed this:
foreach (Group group in Groups) { Controls.Add(group); }
.