Before I start, I'll admit that I've never used a Control typology rule in production before, but here is what I think is happening:
My understanding is that the script in the Control typology rule is run for each delivery it applies to. It is expected that the script will return true or false for each of those deliveries. This means that the Control rule is used to check the validity of the delivery, not details relating to the recipient. See the example here: Control rules.
Even if your for block does iterate more than 0 times, it will return true or false for the first recipient in your resultSet (not the recipient of the actual delivery in question) and then exit.
Again, that is just my understanding, perhaps someone from staff can confirm or deny this theory
However, here are some general suggestions for your script:
You can optimise this script by assigning local_hh without creating two more Date objects I made the change below.
You can simply return the value of local_hh >= work_start && local_hh <= work_end without doing an if/else, I also made this change below.
var tempQuery = xtk.queryDef.create( < queryDef schema = "nms:recipient"