I expect the exit's are causing you problems as you are not crossing the tracking trigger comparisons on each execution.
Tracking comparisons require the trigger comparison is crossed on each execution, so that the old value can be tracked for future runs.
in this example the exit is causing the tracking trigger comparisons to not be crossed.
you could set piston state if you want to have the reason tracked in state (vs. using the exit)
See:
if you put in an exit statement in the piston, this may cause statements below the exit to not be crossed over, that may affect the trigger comparison tracking adversely (for those statements that are below the exit).
While a warning is not generated, this is another case of the warnings:
and
I would also suggest following the request to post logs of the error you are seeing: