Возможно, загружаются два экземпляра вашей DLL - один явно приложением, в котором размещена ваша DLL, а второй - через подсистему COM через CoCreateInstance. Первый будет искать в пути поиска DLL процесс приложения, а второй будет искать в реестре местоположение COM-компонента, который реализует ваш COCLASS.
Если в вашей DLL есть DllMain (или функция InitInstance, если это DLL на основе MFC), то вы можете установить точку останова и посмотреть на аргумент hinstance (или AfxGetInstanceHandle, если MFC), чтобы увидеть, если (a) вы инициализируете дважды и (б) вы видите два разных дескриптора экземпляра DLL. Если так, то вы определенно загружаетесь дважды.
Расположение DLL в файловой системе имеет значение, поэтому вы должны посмотреть, есть ли копии в отдельных местах, которые могут быть отдельно загружены на основе правил, которые я упоминал выше.
Как правило, COM DLL никогда не загружается напрямую. Вы должны разбить свою функциональность на две библиотеки DLL с библиотекой COM-сервера, выделенной для работы с COM. Вы можете предоставить себе внутренний интерфейс COCLASS, который позволит вам передавать ваши глобальные переменные в COM DLL, если вы того пожелаете.