The CLR, in .NET 4, can consume .NET 2 assemblies and use them properly. 
If you want your .NET 2 application to be able to load .NET 4 assemblies, you'll need to configure it differently.  By setting the requiredRuntime to .NET 4, and the legacy load policy, you should be able to force the .NET 2 application to load using CLR 4, which would allow your .NET 4 assemblies to be used.
Setup your app.config file to include:
<?xml version="1.0"?>
<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
</configuration>
That being said, in a situation like this, I'd recommend just using VS 2010 and targetting .NET 3.5 instead of .NET 4.  This would compile your assemblies for CLR 2, and avoid this issue entirely.