I had this problem with both the MediaPlayer and the MediaPlayerStream objects.
The way I resolved it was to create two objects. Load the second one while the first one is still playing, and start playing the second one before the first one finishes - I use an 800ms overlap. It means you have to track progress, but I did get it to work. I don't think posting my code here would help, there are other factors in my application that make it complicated, but the technique itself worked.
In your case you would load the same track into both "players". Since the time taken to load is part of the problem, you could try preloading the second player and use the MP_Complete event of the first one to start the second one playing, but in my experience, you will still have a very small gap this way. It may depend on the track.