Может быть причина в использовании методов выделения памяти для взаимодействия с COM-объектами: Marshal.AllocCoTaskMem и Marshal.FreeCoTaskMem?
Кажется для выделения неуправляемой памяти в общем случае служат методы Marshal.AllocHGlobal и Marshal.FreeHGlobal, разве нет?