Коротко говоря, Вы нарушаете требования апартаментной модели COM. Вы создаёте "ядро" в STA апартаменте главного потока, а вызываете метод в другом потоке, входящем в другой апартамент. При таком подходе проблемы с SetErrorInfo — не единственная, которая может Вас ожидать. Простейшее решение — создавать объект "ядра" в доп. потоке — члене MTA и использовать его только из потоков — членов MTA.
PS Постарайтесь всё-таки расставлять запятые, иначе Ваш текст тяжело читать.