Turns out there was a low-level change to how the 2.0 Framework verifies code for a specific type of IL. And in some cases the older 1.1 compilers emit IL that is now considered unverifiable in 2.0. This was the response from the CLR gurus:
The Everett compiler emits the following code for the original 1.1 call:
IL_0011: ldloc.0
IL_0012: call instance void [System.Web]System.Web.UI.Control::RenderControl(class [System.Web]System.Web.UI.HtmlTextWriter)
However RenderControl is a virtual method and due to the stricter requirements for ASP.NET 2.0, this is not considered a safe way to call a virtual method in Whidbey.
The code change that you made gets emitted as:
IL_0013: ldloc.0
IL_0014: callvirt instance void [System.Web]System.Web.UI.Control::RenderControl(class [System.Web]System.Web.UI.HtmlTextWriter)
From a verification stanpoint, "callvirt" is safe - but "call" isn't.