In this issue I raised :
https://github.com/godotengine/godot/issues/16024
the solution has been presented that you must manually attach() and detach() the thread when created from GDScript (and it doesn't work from C# at present).
Thus the example solution by neikeq in the issue above is :
func _ready():
t = Thread.new()
t.start(self, "_thread_callback")
func _thread_callback():
GodotSharp.attach_thread()
# ...
GodotSharp.detach_thread()
Which resolves my issue perfectly.
Edit: one final wrinkle is that I've found it won't work unless you're passing at least one parameter to the Thread.start()ed GDScript method, even if it's only a dummy. So the above example will need t.start(self, "threadcallback","dummy") and then func threadcallback(dummy):