Thank you Ihor for finding such an important bug.
I've tried to pinpoint it.
I think it happens only when: first heading (row) is the first line of the buffer.
To reproduce it:
* a
* b
* c
C-u C-c C-x C-c => runs `org-columns' with global argument.
Using a keyboard. Press M-<down>, M-<down>, M-<up>.
Heading 'a' will disappear.
I've tried to create a test based on that behaviour, but can't reproduce this bug in test env.
Also I can't reproduce this when I'm invoking the commands directly from M-x.
As I understand it something with overlay. Which try to jump before the first line of the buffer.
And that makes some kind of overflow?
I will try to simplify the example and create a simple overlay without org-columns.
If anyone has some ideas how to debug it I will be grateful for the hints.