This is the solution for my case, I'm leaving it here in case it helps someone someday.
When encountered an exception with an empty call stack, try setting "Enable native code debugging" in project's properties first.
It might add enough info to the call stack to least know where to start. In my case it went from this:
Which gives us at least the name of the native dll at the bottom of the stack of the exception (in DOS format: FOOBAR~1.DLL instead of FooBarBaz.dll).
As for specifically Could not load file or assembly '<some .NET assembly>'
exceptions, the next step is to look at fuslogvw output.
For the assembly that wasn't found, the log entry could show something like:
Calling assembly : SomeOtherDll, Version=...
Then for SomeOtherDll:
Calling assembly : (Unknown)
Which probably means it's called from the native dll we found with the native code debugging enabled.