そうそう、コリジョンチェックは同時に二つ以上は出来ないんですよ。
衝突対象のインスタンスが複数あった場合、
インスタンスIDの最も若い番号のものとのコリジョンチェックとなってしまいます。

以下、こちらの想像になりますが>>838さんの場合、
一匹の判定を行った直後のステップに、
(すでに下がっている位置から)主人公ともう一匹目とのコリジョンチェックが入るため、
if (vspeed > 0 && y < other.y+8) が満たされずにあぼーんしていると思われます。

場当たり的な解決法ですが、
主人公と敵のコリジョンチェック時に、主人公へ以下のコードを適用してみてはどうでしょう。
---------------
x = xprevious
y = yprevious
---------------
この場合1ステップごとにそれぞれ判定するため、
かなりの数が重なっていた場合は動作がおかしくなってしまうかもしれません。

1ステップで全ての判定を行うには、ちょっと複雑なコードが必要そうですね。

これで解決できなくてもうらまんでください。。。