Причина в том, что BackgroundWorker.RunWorkerCompleted не должен вызывается из потока, который создал объект.
Он должен вызываться с тем же контекстом синхронизации, в котором работал поток, создавший объект. Если контекст синхронизации есть, то эти два высказывания эквивалентны. А вот если контекста синхронизации нет, то BackgroundWorker.RunWorkerCompleted вызывается из потока из пула.