@i_am_sy and I did a bit more experimenting.
The issue is definitely within giffgaff specifically.
We know this because, while testing other O2 APNs (Tesco and O2 themselves) the issue still exists.
This might make it seem like the issue is O2-wide, but this problem still happens because the MVNO value in the APN is still set to
giffgaff, meaning that the servers process it as giffgaff traffic.
All the O2 APNs redirect to the same internal servers, as far as I can tell. This is probably for backwards compatibility and because it’s just plain easier. It’s only the MVNO value that determines how the data is routed/processed. If this value was changed, you couldn’t connect without changing it back.
We can also confirm it’s not O2-wide as someone I know on Tesco, and @i_am_sy on O2 can’t reproduce these issues, but I can on giffgaff.