I have solved all my problems (well, my ntp problems at least) by moving to chrony and gpsd.
Definitely other folks comments of using GPSD helps, but I cant see why reading NMEA directly with NMEA driver shouldnt have worked. Generally my time with ntp classic and ntpsec has been unproductive.
I did get a ntpsec working with KPPS of around 15usec, but chrony does much better.
Here is my current config and my result:
/etc/chrony/chrony.conf
server tick.meraka.csir.co.za iburst
server tock.meraka.csir.co.za iburst
server time2.facebook.com iburst
initstepslew 10 time2.facebook.com
driftfile /var/lib/chrony/chrony.drift
refclock SHM 0 offset 0.5 delay 0.5 refid GPS
refclock PPS /dev/pps0 lock GPS refid KPPS
rtcsync
keyfile /etc/chrony/chrony.keys
log tracking measurements statistics
logdir /var/log/chrony
makestep 1 3
allow
root@ntp-s1-1:/home/pi# chronyc sources
210 Number of sources = 5
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
#- GPS 0 4 377 21 -101ms[ -101ms] +/- 252ms
#* KPPS 0 4 377 21 -22ns[ -736ns] +/- 925ns
^- tick.meraka.csir.co.za 1 7 377 4 -38us[ -38us] +/- 29ms
^- tock.meraka.csir.co.za 1 7 377 194 -1247us[-1247us] +/- 31ms
^- time2.facebook.com 1 8 377 195 -1460us[-1460us] +/- 6342us
root@ntp-s1-1:/home/pi#
The solution was derived from these sources:
https://github.com/dstumbo/chrony-rpi-gps
https://forums.adafruit.com/viewtopic.php?f=50&t=70133&start=255
Thanks to everyone for all their help and support.
Have a great easter break.
Salaams,
Alex