let's look at Dresden for comparison.
The comparison doesn't really holds entierelt there I think : in 1813 and while having suffered an important defeat in 1812, Napoleon still had more ground and ressources at disposal than he did in 1815. Veteran troops, still fighting outside napoleonic "inner sphere" (altough the battle was about logistical control) all things that allowed Napoleon to quickly raise more troops without scrapping what it could get.
More to the point, Hannibal has a numerical advantage here.
Which is not as a clear obvious advantage you seems to make it. Most ancient battles does point that and even with a skilled general leading them, numerical advantage only generally have to tempered with supply, quality and maneuverability of troops. Namely, 1/3 of Carthaginian army was taken from urban citizens which had little occasion to sharpen their fighting skills so far : there's no comparison with the Roman army citizen infantry at this point of the war.
Moreover, Hannibal did not derive his advantage from any revolutionary changes in the art of war that his enemies can simply adopt like Napoleon did, but rather from the timeless art of command.
While his command skills were real, especially among armies he led since a decade and a half then, I think you're wrong to consider his tactical skills played no major role :
there's a consensus this is exactly what made him a great general (and compensated for not that great strategical perspective)
So you're essentially arguing that one of the greatest generals in history can't use his numerical superiority to take advantage of his enemy's monumental blunder and win a decisive victory.
I'm essentially arguing that one of the greatest genera in history, fighting a battle in a war his side was loosing hard at this point, can't reverse the result a battle from a crushing defeat from an epic-scale victory just because he's leading an hastly gathered patworkesque army. Feel free to disagree, but I'd prefer if you were able to recognize the point you're disagree on.
It probably safe to assume that there was a non-zero chance of Hannibal's battlefield victory
I don't disagree with this, of course : for a given definition of "victory" (I know you understand this, giving we already discussed about this situational definition of victory). Frankly, I don't think we're in disagreement there : Hannibal could have pulled a tactical stalemate forcing Romans to regroup in an infetiority position with still political and strategical upper hand in Africa.
What's next is anybody's guess because a lot would depend upon Senate's willingness to send reinforcements to Africa
I think it would go down to two things : how much and how long Rome can afford a relatively long conflict in Africa (or even in Spain or Sicily if they thought Carthage could pull it back there, which would arguably be concieved IMO in the first case), and how much political support in Italy would be the idea to just double down on the operation (while doable IMO). I don't know enough about senatorial politics at this time to remotely guess which would have been considered and how it could have made to happen.
position of the vassals of Carthage, etc.
A lot of second-guessing and status-quo I think, even if the "devil you know..." would probably play a lot in favor of Carthage when it comes to Punic cities it dominated IMO.
Seems that at best Carthage may expect to get a somewhat better terms.
I think that's what Carthage mostly expected from Hannibal there : the city already asked for terms to Rome and these were really harsh. Trying to pressure negotiations thanks to pointing Rome they could be as bogged down in Africa than Hannibal was in Italy was quite sound strategically.
Also, Hannibal fought on his home turf, and presumably, the Romans didn't have good maps. Shouldn't that count as an advantage for him?
It did played a role, you're right, but I'm under the impression it was more political-strategical : Romans were clearly invaders there and received limited support (I'd be tempted to say that their alliance with Numidians, a more "traditional" other of Punic in the regions whom relationship was supposed to be subservient played a role there), so as raising a lot of men from urban reserves into Carthaginian's army in Zama does point, Carthage's political network was largely holding up against Romans.
On the other hand, if the battle had the goal to search for better terms, while the negotiation manoeuvre would likely be better ITTL, I'm not sure Carthaginians allies would allow too much risk-taking there.