I believe, you may resolved the problem by using this code in your script
Logging.DebugEvent.Raise(Me.GetType.Namespace, Reflection.MethodBase.GetCurrentMethod().Name, _
"Report data recieved from database")
This is a call to a Application Block (MS enterprise library) for logging events to flat files (in this case) or event logs.
This one, in between the ExecuteXMLReader() and the actual usage of the reader in the XML document, was sometimes failing harshly, causing the whole thread to abort. I moved the line to after the _xmlReader.Close() and it took care of the problem.