First off, don't use your character sprite to detect collisions. You should use your Pbox object.
Secondly, your worm animation is changing size much too dramatically to use Bounding Box collisions. You need to either use Per Pixel, or redesign your worm so it's more consistently uniform, and then give it a collision box similar to your player's Pbox.
Thirdly, you have some really odd conditions here, and I don't understand why you would need them:
<img src="http://i55.tinypic.com/123pbw9.png">
Why is the worm's attack animation important in figuring out whether or not there is a collision? Why is the player sprite's angle important? You're trying to do too much at once in one event, and you're getting your order of events all wonky.
You need to think a bit more logically about how the attacks take place. As a general rule of thumb, when making your conditions you need to filter them from the very basic (two sprites colliding) at the top, and work your way down towards the more specific things (is an animation playing?) towards the bottom, or in your sub-events.
So, what is the very first thing that happens when checking for an attack? Two sprites collide, that's what. What next? Well, you need to know if the player is falling, or if he's just standing there. Etc. This other stuff either isn't important, or it's out of order, and that is the reason your combat is behaving so randomly.