What is the answer?
The Runtime first looks in the GAC and then in the probing path of the application which includes the bin to load an assembly.
What does this imply?
If you have 2 assemblies with the same version, one in GAC and other in bin, the assembly in GAC is loaded
If you have 2 assemblies with different versions, one in GAC and other in bin, and the version to load is not specified in the config, then GAC is loaded
If you have 2 assemblies with different versions, one in GAC and other in bin, and the version to load is specified in the config, then the specified version of the assembly is loaded either from GAC or bin, wherever the runtime finds it first.
Read more: My.Ramblings