Тестим на строке предложенной JR. При запуске первые два строки выдает верно: <span xml:lang="en" lang="en"><b><span>Turanga Leela</span> <span> Turanga Leela</span> А далее идет радостная весть, мол код ваш говно и вообще.
java.lang.StringIndexOutOfBoundsException: start -1, end 68, length 68
На этот счет у меня был предусмотрен хирый маневр. Который (что характерно) нифига не работает.
catch (StringIndexOutOfBoundsException e) {
// Хитрый маневр
// Если закрывающий тег идет раньше чем открывающий - удаляем закрывающий тег из строки.

                e.printStackTrace();
                stringBuilder.delete(endTagIndex, (endTagIndex + tag.length()));
            }