A few ideas:
1) This is how I think you suggested working:
Start exactly the same as you, preparing two copies MediaPlayerwith the same medium.
A call setNextMediaPlayereach time passing another as a parameter.
onCompletion stop() prepareAsync() . , , , setNextMediaPlayer. , , onPrepared, , .
seekTo(0) onCompletion, stop()/prepareAsync(). , , setNextMediaPlayer, MediaPlayer . ( , .)
, MediaPlayer , , setNextMediaPlayer . , onPrepared, MediaPlayer .
2) MediaPlayer seekTo(0) start() onCompletion. , , , , . , .
3) OpenSL . , :)