This was the result of two interlocking features of the tools I was using.
First of all PDB breakpoints seem to be locked to the thread they were inserted from. Consequently, because the QT Eventing thread was the one triggering the update, PDB wasn't able to detect the invocation.
Secondly, QXMLQuery seems to have inbuilt caching, meaning that changes to focus and query files had no impact on the second invocation of evaluateToString()
Between these two features, it meant that I was unaware that update WAS in fact being called. After building a minimal test case, I was able to track down the problems.