At durring a multithreaded stress tests I got the problems with ICU. Later I found in extern\icu\readme.html the next informations
Using ICU in a Multithreaded Environment
Upon the first usage of most ICU APIs, the global mutex will get initialized properly, but you can use the u_init() function from uclean.h to ensure that it is initialized properly. Without calling this function from a single thread, the data caches inside ICU may get initialized more than once from multiple threads, which may cause memory leaks and other problems. There is no harm in calling u_init() in a single threaded application.
I added in to icuuc30.dll the DllMain function (see attach) and made two pass of my tests - all work fine without any problems.
(But I use the umtx_init instead u_init, because u_init can return the error at durring ICU compilations).
Also, I added the call of umtx_cleanup for releasing the resources of ICU critical sections. With u_cleanup I got the problem in x64 build.
Could you add this (or similar) code to your ICU "common" project?