PLAY SPRITE has some oddities and some people don't even bother with it and manually animate sprites themselves. However, if you can learn how it works, it can be an effective command to use. When you call it after it has already played something else, you need to set the sprite frame to the first image you want to use when you call it again. To give you an example, lets say you want to play frames 3 to 8 (held in the variables, StartAnim and EndAnim) and the number of the sprite is held in the variable, SprNum. You would use
set sprite frame SprNum,StartAnim
PLAY SPRITE SprNum,StartAnim,EndAnim,delay would still have to be used in every iteration of the code. So in normal use, lets say the player is moving up and then moves right. When you register the input to go right, you would set the sprite frame to the first frame in the moving right animation.
ROTATE SPRITE works well, so there must be something in your code that needs to be changed. I can't help you with that unless you post up the section of code that you are using.
Hope this is helpful.
So many games to code.....so little time.