I've implemented everything so far, and moved to an SSD rather than a HDD as I felt that this may have been the only remaining issue, which seemed to work.
The points you've both made are still very useful, however, as we are likely going to much higher frame rates, at 12-bit, and with a higher res camera in the next month or two - so hopefully the code will be robust to hold up to that.
I think the problem might be that you are doing significant processing in the Producer loop. The Producer should "Produce, then hand off to the Consumer". You subtract two (constant?) sub-Images, then do a linear remapping, which I can imagine takes significant time (i.e. > 1/30 sec).
A couple of points (which you should test, as predicting things in IMAQdx is a Fool's Errand):
You might not need separate sub-Images. IMAQ Absolute Difference will produce A-B in the Output even if there is no Image Dst on the Input (A will be lost, but you don't seem to use it later).
Consider moving some or all of the post-Image processing to the Consumer.