Oh man, these bugs are hard to find. There are a lot of things which are different between the debug and release DLL's, and any one of them can cause this.
The bug is probably there in the debug DLL as well except it doesn't manifest itself as a crash.
Hold on tight, because it ain't gonna be pretty:
Take a look at
this. Using that you can debug your optimized release build in VS (it will not be exactly the same as debug DLL, but might have enough info). I know it relates to VS2010, but the info there seems better than that of previous versions.
The C/C++ flags should be added in the makefile to
Release_CFLAGS, and the linker flags to
Release_LDFLAGS.
You should probably also add this to the linker flags:
This will create a map file when the DLL is compiled with a list of functions in the DLL and their memory addresses. That way, even if during the crash you only see a callstack of addresses without symbols (and you can get this even without the flags in the previous link), you can have an idea of where in the code it crashed.
After you rebuild your release DLL with the added flags, run the game from VS (or attach to it), and then when it crashes you should (hopefully) have a better understanding of the problem.