I think I've sussed it out now.
I'm using the ASIO Cakewalk UA-1G USB audio interface. I've set up the Audio in GTP4 to use this, and I thought it was using this for everything.
Turns out that Kontakt is using this, whilst the MS GS Wavetable is using the regular sound card. So I guess the regular sound device has greater audio latency than the ASIO device.
So I guess MS GS Wavetable is behind the beat whilst Kontakt is on the beat, not ahead of it.
I'm putting all the tracks through Kontakt now, which not only resolves the timing issue, but also sounds much better :-)