A GPS receiver has its own internal clock, which has a clock bias compared to the potentially more accurate atomic clocks on the GPS satellites. When a GPS receiver has a fix on 4+ satellite signals, it can use that information to calculate what the value for its bias is and synchronize its clock to that of the satellites. So we have two main components contributing to inaccuracy:
- accuracy of the GPS satellite times; the satellites have their own atomic clocks which are synchronized to a ground station's reference time: according to gps.gov the error is <= 30ns
- how accurately clock bias can be estimated from GPS signals, which includes both the solution to the equations to calculate bias, and also the design of the GPS module's electronics/processing: according to this manufacturer, this manufacturer, and gps.gov this is around 100ns for an average receiver, but can range between 10-1000ns
So the error for a GPS synchronized clock will be between 10-1030ns, with an average error being 130ns. This manufacturer suggests < 50ns as an accuracy for a typical Stratum 0 reference time server used for NTP; this is expected, as they likely use the highest quality GPS receivers giving you <= 30 + 10ns (40ns) error. Its likely the manufacturer for your specific GPS NTP server will be able to give you specs on how accurate the times are.
On the other hand, NTP synchronized times are less accurate, instead being in the millisecond error range: < 1 ms for local networks, ~10+ ms over the internet. Assuming you have a constant, high quality GPS fix, an on-site GPS NTP server is going to give you better accuracy than synchronizing with another external server.