This is in my experience almost certainly caused by your windowing application checking if the keyboard was used recently, after the command was successfully executed. That things sometimes work probably has to do with how fast the
xset command can be loaded into memory and executed, if that takes time then your screen is blanked after the keyboard check. If it is executed once chances are high that you
xset executes without such a delay the next time and it will not work at all.
I suggest you make an alias
alias blank='sleep 0.2; xset dpms force off'
and use that. Those 0.2 seconds delay always were enough on my system.