Upgrading an MSCRM 4.0 implementation to MSCRM 2011, we encountered a few issues regarding our custom plugins.

The upgrade actually worked fine, and our plugins continued to work in the new 2011 environment.

However, we encountered issues when trying to make changes to those legacy plugins - we were unable to update a plugin using the Plugin Registration Tool, and we also couldn't debug a plugin.

Here's what we did to get around these two problems:

Updating an MSCRM 4.0 plugin within MSCRM 2011

AccountPlugin.dll was written using Visual Studio 2008 and registered into a CRM 4.0 organisation. This organisation was then upgraded to CRM 2011.
We then had to make some changes to the dll. However, when trying to update the existing assembly using the Plugin Registration Tool, we received the error:

Plug-in assembly does not contain the required types or assembly content cannot be updated.

To resolve this, we had to un-register the existing assembly (and all its steps/images) using the Plugin Registration Tool. We were then able to re-register it as a new assembly (and had to re-configure the steps/images).

Debugging a MSCRM 4.0 plugin within MSCRM 2011

Once we had registered our updated version of AccountPlugin.dll, we wanted to debug it. So we loaded up the code in VS 2008, and attached to the w3wp.exe on the server.
Although our new plugin worked, we couldn't get it to hit any breakpoints, instead getting the dreaded "the breakpoint will not currently be hit. No symbols have been loaded for this document" problem.

To resolve this, we converted our VS2008 plugin project to a VS2010 plugin project.
When we attached that to w3wp.exe, we were able to hit our breakpoints and debug our code.