I'm using a multithreaded approach as well. Perhaps why I'm not having problems is that I'm not passing the stockHandle between threads, although I'm not accessing it in the same thread that called the DLL...
I do all of my API message processing in one thread and use an implementation of PostThreadMessage/PreTranslateMessage if I need to move from thread to thread. Unfortunately, the Windows message pump has a limitation (15k messages?) so I don't queue directly to the pump.
Could the problem be that the API is just not thread safe?
Anyway, it's good to know! If I start seeing weird problems crop up, I know the first place I will look.