1) If you, for example, merge a cell in 2x1 table, a row containing only nil cell appears. This row is useless, so DeleteEmptyRows is called after MergeCells to remove this row. The table becomes 1x1. A row is losed.
It is by design.
2) Sorry, without knowing your code I cannot help. I do not know how you insert RVF. If you will be able to reproduce on trichview demos, or if you can create a simple project reproducing this problem, let me know.
Moved table routines to update toolbars from OnCaretMove back to another place and everything works fine again because any modification of RVE with caret inside the table fired access violation (just even typing).
Yes, modification (and even working with selection) is not expected in OnCaretMove.
Use OnCaretMove only to function related to the caret position.
Use OnSelect to update controls depending on the selection.