Как показал глубокий анализ вашего кода, вы, по-моему мнению допустили ошибку в модуле SclRView в процедуре TSRichViewEdit.DrawComponents
Было :
for ItemNo := StartItemNo to EndItemNo do
case RVData.GetItemStyle(ItemNo) of
rvsComponent :
begin
..........
и это вызывало ошибку при :
1. Вставка текста из буфера с последующим вызовом команды UnDo
2. Некоторых случаев нажания BackSpace
3. И Выполение InsertText
А имено, как я понимаю, проблемы в получением кол-ва элементов в RVData.
Вариант который это фиксит :
begin
RVData.UpdateItemsPaletteInfo; // обновляет как я понял RVData
for ItemNo := StartItemNo to RVData.ItemCount - 1 do //у вас получались разные значения в EndItemNo с реальным кол-вом в RVData
// for ItemNo := StartItemNo to EndItemNo do
case RVData.GetItemStyle(ItemNo) of
rvsComponent :
begin
......
И это вобщем работает. Потестили ошибок пока не выявили. Если мы не правы и если это что-то затронит - сообщите.