@Donald yeah what you're seeing is pretty normal behavior for a high-rate GNSS engine — at 18Hz you're right at the edge of what the receiver can consistently process, and the computation time per fix actually varies depending on how many satellites are in view and the geometry at that moment, so the output jitter of ±10-15ms is expected rather than a bug.
The bigger factor is usually your host-side timestamp — if you're timestamping on UART receive rather than on the PPS pin or the NMEA timing pulse, you're capturing serial buffer latency on top of the engine jitter, which can easily account for that 48-70ms spread you're seeing.
If timing precision really matters for your application, try anchoring your fix timestamps to the 1PPS signal if you're not already — that gives you a hard 1-second reference you can interpolate from, and the jitter becomes way more manageable. What's the use case — are you doing trajectory reconstruction on a fast platform or more of a data logging thing?