This happens because the constructor of your control class also runs at design time. Which sets the DataSource and the Items properties, their values will be serialized like properties normally are. So you see them back in the Designer.cs code. Usually unseen, not when it generates an exception like it does in this case.
You tell the designer serializer to not do this by using the [DesignerSerializationVisibility] attribute:
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public new ObjectCollection Items {
get { return base.Items; }
}
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public new object DataSource {
get { return base.DataSource; }
set { base.DataSource = value; }
}
Adding the [Browsable(false)] attribute also hides the property in the Properties window, very likely you'll want that as well.