I think I've got it figured out. On advice from TI, I did a complete cycle to recalibrate. A complete cycle apparently requires a full charge, sit at 100% for 2 hours, then a full discharge below 3.0 volts and left for 5 hours. It was the "leave it empty for 5 hours" part I didn't know about. It's taken me the better part of the weekend to get to this point, but preliminary results are very favourable. I'm going to try one more full cycle to 100% and back down and see if it approaches zero this time. The TI tech suggested it may take a few complete cycles for it to really learn where zero is, but if it even comes close this time I'll be happy.
If you have purchased a second battery I highly suggest you do this with that battery as well. The bq chip is capable of holding data on two batteries and distinguishes between the two based on some chemical signature or something. This way, if you ever need to swap between the two, the second battery will give an accurate reading, as opposed to some defaults that may only be close at best, or off by up to 20% (or more!) at worst.
To fully charge and leave it at 100% for the expected hour, in the /etc/pandora/conf/eventmap file change [battery_charge] enable from 1 to 0.
My current theory is that the smart charging, with it cycling up and down around 95% to keep the battery from overheating, is slowly causing the bq chip to think there's less and less capacity even though it isn't true. It needs a good deep cycle every once in a while to remind it what an empty battery looks like. I'm going to ping this idea off the TI tech as soon as I confirm my battery is cycling properly again.