The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).
I've encountered this error a few times with my own custom controls and with the AjaxToolkit when I was upgrading a legacy project with a UI refresh.
In both cases, I had added a .js reference in my <head> tag that resolved using <%= Page.ResolveUrl("my.js") %>. Apparently .Net doesn't like that when it tries to add a another header dynamically from a control (i.e. registering a new WebResource .css file).