My best guess, then, is that there is something wrong with the ASM routine you wrote.
Based on the use of "faceplayer", I'm assuming that your script runs when talking to an OW or signpost, rather than running when you step on a tile. If that's a correct assumption, then the fact that the routine only freezes when you step on a tile (as opposed to freezing the instant CmdA6 activates it) means that the issue occurs when your routine detects that the player has moved.
Focus on the general part of your routine that does something if the player's position has changed. The problem is probably somewhere inside of there, and a debugger might help you to narrow it down. My best guess is that your routine ends up not returning, or not returning properly (unshift the stack pointer and pop the registers prior to returning, and in that order).
All of this, of course, is assuming that you're not doing anything particularly out-of-the-box with your routine. (For example, trying to call a script from inside of your CmdA6 ASM routine could cause a freeze even if the routine itself works perfectly -- the new script would cause the old one to terminate before "release" is run, leaving the OWs locked forever.)