I ran into a similar situation in Transmitter. Just a single steal in that map, though. Taking the object caused the goal tracker to increment, as usual, and the goal_num of the steal action remained at the previous value (which ensures that the steal action goes inactive). If another event occurred while a player was carrying the object (say, a major construction is built or a dynamitable object is destroyed), the goal tracker increments again. So far, so good. But if the object is then recovered by the opposing team and the goal tracker decrements, it doesn't decrement far enough to match the original goal_num of the steal action so the steal never becomes active again.
The fix for this situation is to force the goal_num of the steal to the current value, like this:
action X (the steal)
{
....
if_obj_home_true X
activateAction X
....
}
Perhaps this fix can be adapted to your situation.
I also encountered a similar problem with dynamitable objects in Transmitter. I needed to know whether a gate had been blown in a conditional test used in another action, but occasionally it would tell the program that the gate was intact when in fact, it had been blown up. The problem was very similar to the one described above. If the object had been stolen, then the gate blown, the gate's goal_num would be left at the value set by the steal and the goal tracker would increment further due to the dynamite action being completed. Then if the object was recovered, decrementing the goal tracker, the goal_num of the gate would then match that of the goal tracker and the program would think that it had not been destroyed.
The fix is simple, once you know what's going on:
action Y (the dynamite action)
{
....
deactivateAction Y
}
Hope this helps!