A few thoughts...
If the rule runs correctly when using the Run Actions button, it seems likely that your trigger is the root cause. Logs should confirm this.
If your two IF statements cover every possible evaluation of the conditions, you really only need one IF statement followed by an ELSE (and the obligatory END-IF).
This seems like a good candidate for a WAIT FOR CONDITIONS action. Once temp is over setpoint, set mode to OFF. Could even set a timeout value as a failsafe.
Have you looked at using a virtual thermostat app for this? nclark's Advanced Virtual Thermostat will create a virtual device that actually "reads" a temperature sensor. It can also control any real or virtual switch based on that temperature sensor...
Then you could let the app/virtual devices handle the temperate evaluation but you would still need a rule for setting the modes of the real thermostats (heat/cool/off) to match the new virtual device. Maybe this is an improvement, maybe not. That's your call.