I believe what you are seeing is the intended behaviour.
By setting a 3pm off peak end time, it will try to schedule the charge to commence such that it reaches your target charge by 3pm.
Because you only started charging at 2.30pm, it did not have time to reach your target charge by 3pm, so it started charging immediately. By 3pm, it still was not at target charge, so it kept charging.
It will prioritise your target charge over the off-peak end time, assuming the target charge is more important than the energy costs. It would be nice if they gave us a selectable option to prioritise off-peak end time, but they don't.
If you want it to stop at 3pm regardless of SOC, there is no simple way to do it, but here's a couple of workarounds:
1. The way I do it sometimes is roughly work out how much charge it will add by end of off-peak, based on rate of charge. For example, in your case, I don't know your charger setup, but if you are charging at 6kW with a 60kWh battery, that's about 10% per hour, so add 5% to the current SOC and set that (so 60% in your case). This won't be a precise method, and you'll need to modify it every time.
2. Another way to do it is with automations in iPhone (or the Android equivalent). Set up an automation at 3pm every day to either "stop charging" or "set charge limit to [lower value eg 50%]". Lowering the charge limit will cause it to stop charging if it's above that limit. I don't find automations to be 100% reliable - every now and then the message doesn't make it to the vehicle. But they work most of the time.