If you could post a couple prints on where you have this actions we could imagine whats going on.
About not posting the capx and etc, worry not. I fully understand your concern.
About the function, you should really check it. Its REALLY easy. It would be something like this:
Function freezePlayer()
.......................................set "locked" to Movement;
.......................................wait 0.3 seconds;
.......................................set "unlocked" to Movement;
Then whenever the freeze has to occur, you call freezePlayer().
About the Timer behaviour, i think it is overkill. Do you start it whenever the freeze occurs and have a "On timer complete" event to set "unlocked" to Movement ? My first guess would be timers overlaping somehow.