*disclaimer: The smack talk has begun
Ok. Your AI should be able to do the following stuff, else I will kick its ass every single time. At least, this is how I prioritize my targets and deceide on my plans. Oh and yes, I will happily divulge my secrets. Remember what Ash says: There's no such thing as overkill, only just enough kill.
Target priority. This is decision time. The following rules apply, in no particular order ( this is what I do in any tactical combat).
- Reduce number of attackers. He who slaps the most wins.
- Send casters to hell. The Deepest Pit, as Quick as Possbie if the caster can cast AoE's and summon nasties.
- Shutdown melee heroes. Shrink em. Slow em. Blind em. Curse em. If the AI knows ( and he can) that he can kill off a very, very nasty and quick melee unit in two casts, Take em out.
- Ranged units before slower moving melee units.
- Once you are dedicated to kill something, KILL IT! Currently the AI switches targets, especially against superior numbers, and attacks all of em a bit. If its dead, its not doing damage anymore. He who slaps the most wins... dead things dont slap. A unit with 1 HP leftover is still 100% more effective than a unit with 0 HP.
- He who strikes first slaps one extra time. So put your units with counterattack in the front line 
Pick a plan, stick with it or switch.
The problem is that its not always "take out the highest threat first" or "kill the archers".
Casting time.
Basically there are a few types of spells. Buffs, Debuffs, Extra troops, Molten slag.Those are the options.
- Buff your own army. Battlecry and such are very usefull if started ASAP.
- Debuff the enemy : If a single cast debuffs the entire army and most of them are troops, cast it.
- Shutdown melee heroes. See target priority 
- Reduce enemies to molten slag. As per reduce numbers, unless casters in which case we melt the casters first.
- If its all melee enemy, slow em to a crawl and then pick em off.
- If outnumbered and in possession of Elemental spells... cast em. Strong elementals first, keep em coming.
- Heal when needed, not always. If something does 40 damage per hit and your unit is at 34 HP, an 8 heal spell will keep it in the fight for one more round. But if you do 60 damage with Molten Slag and your unit does only 30... Heal it! (think about the why).
Movement
- Slow em.
- Spread out your own army, even if its hang-back-and-cast/fire. AoE spells exist for a reason ( that is, to make sure you cannot be hit by them and to make sure you can nuke your opponent with them).
- Pile em up so you can AoE em (this requires two-turn planning).
- If the enemy lines up, pick a flank and run it over. Works well with slow em ( once lined up), so you can pick em apart piecemeal.
AI should be willing (And have planned) to sacrifice an army to kill off key units, and then wipe the floor with the rest in the next battle.And then laugh. And laugh. And laugh. And if its with 1 HP and you are with 0... laugh some more.
Mana usage
So lets say we generate 30 mana every turn and fight once every 4 turns, on average. To keep mana at its current level we can expend up to 120 mana. Now lets assume the enemy has 4 cities and we are off on war against the enemy. We stand to gain his cities, his production capabilities and his cash flow. We have 1000 mana, and generate 30 mana a turn. Assuming no-one else attacks us (And that;s a gamble I am willing to take, because I will have non-aggression pacts everywhere) the maximum amount of mana I would spend is... everything... becase I will be at +4 cities and thus increase the total might of my empire by +4 cities plus all the resources those lands contain. Unless we are at war with everyone.
Come and get me 
p.s. Do bring out your dead. I've been at this since I was 9, I am now 32. Tabletop, PC, PnP or board, if there's something to kill, I will kill it. Make me an AI that struggles. LOTS.
p.p.s. Common sense tactics always apply. If you point out something that's common sense and that the above doenst seem to fill, you are allowed to assume I've taken that for granted.