This ones been annoying me for a while. Finally worked out the sucker! (Well atleast one case) :)
I think its to do with syntax errors within the designer.
Create a new, or open an existing, Form or UserControl, it doesn't matter. Add a button to it (or any other control). Double click the button (ie. the shortcut for subscribing to the click event - or subscribe to any other event). Now within the code, delete the event handler method and go back to the control. You can no longer delete any controls.
The control hasn't re-generated its designer code - and so the control's event still has a subscription passing in an invalid delegate. The reason closing and reopening fixes the problem is because the designer code is regenerated, removing this event subscription.
Hope this helps.
Tyson.