Why are game engine properties changing 1 tick late?
Problem
The problem was that, your integer property Timer was still equal to 45 when the weapon was switched, for exactly one logic tick, allowing a shot to escape. Then, one tick later, the message actuator could deliver the message to assign the property Timer to 0.
Reason
The message system actually takes one logic tick from the time the actuator receives the positive pulse from the controller, to the time when the message sensor on the receiving end receives the message and sends the positive pulse to it's controller(s).
How to fix it
I have un-checked the the check boxes on all of the logic we aren't using so it will be easier to see the necessary change. (re-check them before testing)

Your end result should look like this, only without the actuators on Active_Determiner
Essentially, all you need to do is Delete the logic bricks marked by a red box, and connect the bricks where the Blue lines are.
This will completely cut out the message system, (and the one-tick delay) and directly connect the bricks instead.

result:
It works! - yay!

If you didn't understand that, don't feel bad (logic can be confusing.) here is the blend file in case you did get confused.