...I don't actually see any mod-specific code in the stack trace, but I'm willing to bet this isn't something that could happen under vanilla.
2495415 [Thread-6] ERROR com.fs.starfarer.combat.CombatMain - java.lang.ClassCastException: com.fs.starfarer.combat.entities.Missile cannot be cast to com.fs.starfarer.combat.entities.Ship
java.lang.ClassCastException: com.fs.starfarer.combat.entities.Missile cannot be cast to com.fs.starfarer.combat.entities.Ship
at com.fs.starfarer.combat.ai.missile.MissileAI.<init>(Unknown Source)
at com.fs.starfarer.loading.specs.d.super(Unknown Source)
at com.fs.starfarer.loading.specs.d.super(Unknown Source)
at com.fs.starfarer.combat.entities.ship.super.J.super(Unknown Source)
at com.fs.starfarer.combat.entities.ship.super.J.fireProjectile(Unknown Source)
at com.fs.starfarer.combat.entities.ship.trackers.OoOO.String.super(Unknown Source)
at com.fs.starfarer.combat.entities.ship.trackers.OoOO.super(Unknown Source)
at com.fs.starfarer.combat.entities.ship.trackers.String.o00000(Unknown Source)
at com.fs.starfarer.combat.entities.ship.trackers.String.o00000(Unknown Source)
at com.fs.starfarer.combat.entities.ship.trackers.OoOO.String(Unknown Source)
at com.fs.starfarer.combat.entities.ship.super.J.advance(Unknown Source)
at com.fs.starfarer.combat.systems.G.Ò00000(Unknown Source)
at com.fs.starfarer.combat.systems.G.advance(Unknown Source)
at com.fs.starfarer.combat.entities.Ship.advance(Unknown Source)
at com.fs.starfarer.combat.CombatEngine.advanceInner(Unknown Source)
at com.fs.starfarer.combat.CombatEngine.advance(Unknown Source)
at com.fs.starfarer.combat.CombatState.traverse(Unknown Source)
at com.fs.state.AppDriver.begin(Unknown Source)
at com.fs.starfarer.combat.CombatMain.main(Unknown Source)
at com.fs.starfarer.StarfarerLauncher$1.run(Unknown Source)
at java.lang.Thread.run(Thread.java:744)
I've also got a save right before the battle where this happened, though it doesn't seem to happen reliably - at least, the first time around when I underdeployed, the game didn't crash before I decided that I needed to back up and try again with a bit more firepower.
And, in addition, I used this crash to verify: yes, I can get a heap dump while the error dialog is still up. (I don't think that will be particularly relevant for this error, but if I see anything else that looks memory-issue-like, I can definitely grab the heap.)