I have a GPS connected to my system, and if I change system time to be ahead/behind GPS time by less than 4 hours, ntpd ensures that the system time is updated to match that of the GPS. If, however, that offset is beyond 4 hours, no update takes place.
I have ensured to run ntpd with the -g option, but it still doesn't work, unless I use normal ntp servers, for example having server 0.debian.pool.ntp.org iburst in /etc/ntp.conf. Let us, however, assume that the system in question will not have internet access during normal operation.
The other relevant settings in that file are:
server 127.127.28.0 minpoll 4 maxpoll 4
fudge 127.127.28.0 time1 0.420 refid GPS
server 127.127.28.1 minpoll 4 maxpoll 4 prefer
fudge 127.127.28.1 refid GPS1
(source: gpsd manpage)
I even added tinker panic 0 to that config, just to make sure, but still no luck.