Почему не сработает? В дубликате TextRange останутся старые границы, которые в нужном месте и будут восстановлены, если конечно pasteHTML не заменит выделенный участок. Метод findText не используем же.
Можно конечно и самостоятельно границы выделения сдвинуть:
textrange.moveStart("character", количество_символов);
textrange.moveEnd("character", количество_символов);
или чтобы не двигать конечную точку, сделать textrange.collapse(true)
Главное не забыть потом восстановить визуальное выделение методом select.