I took a different approach to testing this, and it doesn't seem to be working quite right.
Instead of building x64 class dll's, I hacked something together based on wine-staging's related patches, mono's implementation of _CorValidateImage, and disabling a check in wineserver. I'm attaching a diff of that.
Instead of working around managed c++ issues, I looked for a way to use dll fixups more directly from a C# library: https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports
So I have a C# dll that exports an "add" function, like the example, and a win32 console exe that calls it via LoadLibrary/GetProcAddress. On Windows, I can call it multiple times and then exit with no problems. In Wine with your patch, everything works except that the result is incorrect the first time add() is called. I suspect ReallyFixupVTable is changing some registers, and the thunk will have to preserve them.
Thanks for working on this, by the way. Seeing this *almost* work even for a simple test case is very cool. :)