I found a fairly straightforward way to avoid this problem while playing nicely with other apps that insist on installing themselves to the GAC. Your app does not need to install SQLite to the GAC, or alter anything that was installed to the GAC by another app for this fix to be effective.
The basic idea is to allow the .NET runtime to load System.Data.SQLite.Linq from the GAC and redirect the binding to System.Data.SQLite such that it will always select the version required by your app. I have tested this using 1.0.65 distributed with my app with either 1.0.61 and/or 1.0.66 installed in the GAC.
In order to redirect the binding you simply need to modify your app's config file based on this information at http://msdn.microsoft.com/en-us/library/eftw1fys(VS.71).aspx
Here is an example that effectively redirects any version that SQLite.Linq might be looking for to 1.0.65:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Data.SQLite" culture="" publicKeyToken="db937bc2d44ff139"/>
<bindingRedirect oldVersion="1.0.0.0 - 2.0.0.0" newVersion="1.0.65.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
Hope you find this information helpful.
Sincerely,
Vincent Ugenti
Sr. Software Engineer
MiMedia LLC
www.mimedia.com