I’ve boiled it down to being an issue with the Dashboard… I setup a Node-Red instance in IBM Cloud (which is free) and just set http listeners and a Dashboard there and then have the Node-Red instance on my RPi just fire the requests to IBM Cloud and use the Dashboard there.
Without the Dashboard running on the RPi it has now been running stable for 5 days!
(And the Dashboard in IBM Cloud is very responsive even on the Free plan (called Lite))