Personally I would (and have) ditch(ed) the automated collision system and just use(d) meshesintersect(). If it's too slow, use simpler, invisible collision meshes.
However, you might want to try TranslateEntity() first, as your code already generates the values to translate the ship by. I *think* ellipsoid-to-ellipsoid collisions are supposed to work "both ways" (for ellipsoid-to-polygon, by contrast, the dest_type must be immobile) although you *might* have to define a reverse Collisions statement (ie asteroid-to-ship in addition to the ship-to-asteroid one you have). Plenty to try, there.
However, you might want to try TranslateEntity() first, as your code already generates the values to translate the ship by. I *think* ellipsoid-to-ellipsoid collisions are supposed to work "both ways" (for ellipsoid-to-polygon, by contrast, the dest_type must be immobile) although you *might* have to define a reverse Collisions statement (ie asteroid-to-ship in addition to the ship-to-asteroid one you have). Plenty to try, there.