Well, that's weird. There is a cap in the patrol scripts that limit the AI hull. In your case, you shouldn't be seeing anything bigger than one hull class above your own ship. The mCreateShip method in the API has a tough time sometimes though, when it can't fnd an appropriate ship in the shiplist, given the restrictions. At any rate, you shouldnt be seeing a Battleship as AI at all, unless you have one yourself (or possibly a very big Dreadnought). On another note, the SUB shouldn't be classed as a Battleship (because it isnt), it should be classed as a Carrier, even still, a Heavy BattleCruiser is the largest hull class you should be seeing in a New Heavy Cruiser.
For the record, the following is the enumerated type found in the scripting AI for hull classes.
kClassShuttle = 0, // smallest hull size
kClassPseudoFighter,
kClassFreighter,
kClassFrigate,
kClassDestroyer,
kClassWarDestroyer,
kClassLightCruiser,
kClassHeavyCruiser,
kClassNewHeavyCruiser,
kClassHeavyBattlecruiser,
kClassCarrier,
kClassDreadnought,
kClassBattleship, // largest hull size
In determining which hull class an AI opponent will have, I used a restriction where the hull class will be between one above and one below your own class. As you can see from the above list, for a New Heavy Cruiser, you should be seeing either a Heavy Cruiser, another New Heavy Cruiser, or a Heavy Battlecruiser. I'll have to look at the script again and see why you're seeing a Battleship, that shouldnt be happening at all.