Thanks wysota.

After shelving this project for a number of reasons before picking it up again recently, your suggestion of using a queued connection worked perfectly!

I switched from using PyQt to PySide, but the fix was as simple as:
self.connect(self, QtCore.SIGNAL('loadFinished(bool)'), self.checkLoadResult, QtCore.Qt.QueuedConnection)