Here's a tip for understanding how to deal with multiple versions of assemblies loaded from the GAC.
If you have two versions of the same assembly in the GAC, and the SpecificVersion property (on the assembly reference) is set to False (the default), then the ASP.NET runtime will choose the later one from the GAC to load into your application.
We had this happen last week, when my colleague had a reference to System.Web.Extensions, with SpecificVersion false. Now, System.Web.Extensions comes in FX 3.5 but also the preview version 1.0.6014 (or something). He built the project against the 1.X version, but ASP.NET tried to load 3.5, which of course threw a runtime error since the implementation had changed.