We changed /opt to be a loopback/bind mount using:
/home/opt /opt none bind
in fstab, and that allowed the upgrade to work just fine. It's now running 4.5.10 just fine (special thanks to mmorse for his help!).
It seems that there's something wonky in the installer that can't deal with /opt or /opt/zimbra being a symlink.
I opened a bug:
Bug 22104 - if /opt or /opt/zimbra is a symlink, upgrade will fail