1) The Threadrate Datamager gets the $threadinfo array (which contains open=1)
2) You issue the Query to close the Thread
2) save() is called on the Threadrate Datamanager,
After saving, the Datamanager instantiates a Thread Datamanager to update votetotal/votenum using $threadinfo that has passed earlier (containing open=1)
Then it writes this to the Database - undoing what your query did.
Does that make sense?
I'd hook into threaddata_presave and check the rating there, if it's below your limit set open=0.
This should work, without any Query overhead.
Would that explain the 2nd query I gave in the original post working tho? btw, I will test this tonite for sure...