Если твои библиотеки D1 и D2 были загружены с двух разных потоков родительского .exe файла, то и третья общая для них библиотека должна быть загружена дважды по идее
Наверное для DLL_THREAD_ATTACH Но что там такого может быть, если нету уточнения про то куда мапятся данные при инициализации из потока, не могу представить
В общем если твоей идеей было сделать две библиотеки передающие данные друг-другу через другую промежуточную библиотеку, то намного предсказуемее будет использование named pipe'ов