Ohne wirklich eine konkrete Idee zu haben würde ich als erstes schauen, ob der Aufruf von
CoInitialize(..)
auch wirklich immer klappt. Ob da weiterhin im Zusammenhang mit
COM reinspielt, dass du deinen Thread direkt über die
WinAPI aufmachst weiß ich nicht, könnte doch vielleicht auch sein?
// Übrigens:
Warum erstellst du ein TXMLDocument, explizit mit Application als Eigentümer-Komponente, gibst es aber selbst ein paar Zeilen später doch gewaltsam frei? Da würde ich auf IXMLDocument als Referenz-Typ umsteigen. Einladen dann mit
Xml.XMLDoc.LoadXMLDocument(const Filename: String)
.