I could reproduce your problem using the example provided by Cosmin. I could also solve the problem by simply freeing the SyncObj after all threads are done.
As I have no access to your code, I cannot say more, but probably some object instance used by TMonitor isn't freed.