Lo siento, esto no es exactamente Una respuesta, pero el problema se ha resuelto.
Para empezar, acabo de notar una pregunta similar aquí: C ++ LoadLibrary () Error 3765269347. Creo que este da más detalles y vale la pena echarle un vistazo si estás en una posición similar a lo que era.
Mi agradecimiento a @whozcraig, @danlarinaranas y a todos los que hicieron comentarios útiles. Para otras personas que leen esto, hay un buen artículo sobre Hresult que se expande en sus puntos en Wikipedia: http://en.wikipedia.org/wiki/hresult.
En mi caso, el problema ha desaparecido tan misteriosamente como surgió. He creado una clase C ++ para llamar a la DLL regularmente. Mi esfuerzo original cargó la DLL inmediatamente antes de la primera llamada, y la almacenó en caché en la memoria. Esto es lo mismo en principio de cómo ha funcionado durante más de un año. Esto dio como resultado el misterioso error anterior.
Lo he refactorizado para cargar la DLL durante la construcción, pero solo extraer la función de ella en el momento de ejecución. Aparentemente, esto funciona, y es probablemente una mejor manera de hacerlo (cargar la DLL durante la construcción, liberarlo durante la destrucción). Como hay muy poco entre la construcción y la primera llamada a la DLL, no puedo ver por qué un método debería producir un error del sistema operativo, y el otro no.