I'm saying for example when you collide and the shell is not moving you set it to moving, which makes the condition directly below true 'not not moving', whereas with an Else above each condition it would only run one of them.
1. why is the player set to bounce when the shell is moving, that's what you intended? or is that a typo? Or if the player is not bouncing as you say, when is he meant to bounce?
2. not sure on the direction as this is only set in one place and looks ok but maybe the else can tidy it up, or maybe it is a bug like when the shell goes to move state and moves past the player then it triggers the collision event again so this is why I say adding logging is good too!