Not the best way to do it, but since no one else provided any suggestions, here's what I did:
1. The
LoaderApp loads all the referenced assemblies in memory (as shown in the code snippet of the original question
2. The loaded Assemblies are passed to a private method implemented in the dynamically loaded assemblies which simply accepts (and stores) an Assembly[] collection.
3. I've added to the dynamically loaded assmeblies:
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);
4. For each unresolved assembly, the dynamic assembly checks its Assembly[] collection and returns the matching one as the correct referenced assembly.