Had exactly this on the narrowboat last summer — drove me absolutely mad for about three weeks before I figured out what was going on.
Turned out my BatteryProtect and the MPPT weren't talking to each other properly over VE.Direct, and the controller was essentially taking its state-of-charge reference from a slightly dodgy shunt reading rather than actual voltage. The Cerbo GX was showing 100% on the dashboard whilst the batteries were sitting at a resting voltage that told a completely different story.
The fix for me was recalibrating the BMV-712 shunt — it had drifted after I'd done some work on the 12v circuits and hadn't properly zeroed it back out. Once that was sorted, the MPPT suddenly "knew" where it actually was in the charge cycle and bulk started behaving properly again.
A couple of things worth checking in your case:
- Tail current setting — if it's too high, the controller thinks absorption is complete earlier than it should
- Absorption time — is it set to fixed or adaptive? Adaptive can be sneaky
- Any load on the system during charging that might be confusing the current calculations
Also worth having a look in VictronConnect at the charge history graph. The shape of the bulk/absorption/float transitions will tell you a lot about what's actually happening versus what you think is happening.
What batteries are you running? Lithium or lead? Makes a big difference to how the MPPT interprets that 80% ceiling. If it's Fogstar or similar LiFePO4 with a BMS that's sending charge signals, that adds another layer to unpick.