Hola
Cuando trabajé con TTS hace tiempo ya tuve esos problemas que creia que eran por la versión de Android, y se me ocurrió una forma simple de solucionarlo, al menos con el texto que yo trabajaba.
El texto que tenia que pasar a voz, antes de enviarlo a: TTS1.Speak(Texto, False) , miraba donde estaba el primer CRLF y enviaba ese trozo, luego me ponia en un bucle Do While Loop hasta que entraba en el evento Sub PE_TextToSpeechFinish (Intent As Intent) , en este evento tenia una variable global que me decia que habia acabado la pronunciación, el bucle lo detectaba y volvia a coger desde el ultimo CRLF hasta el siguiente y lo volvia a enviar, y asi hasta acabar todo el texto. Claro, me iba bien por que no tenia textos que no tuvieran un salto de linea en mas de 4000 caracteres. Si en tu texto no tienes CRLF, puedes enviar cuando detectes un punto "." , no quedará mal que en cada punto se detenga casi nada la pronunciación.
No se si me expliqué bien, si no lo tienes claro me lo dices y te hago un código rápido.
Saludos