...I found the problem. My header that was declaring my contained type (and a SingletonHolder typedef) had this:

#define LOKI_CLASS_LEVEL_THREADING
#include <loki/singleton.h>

...but the Singleton.cpp file I included in my make did not have that #define statement. It caused its translation unit to have a Mutex of a different size. Without the /clr switch, that problem goes undetected.

So I made a local copy of Singleton.cpp in my VS project, and changed its #include statement to point to my own header that was giving the #define. Problem solved.