I found how to reproduce this bug!
Please, open ADOSelection demo.
Add new button on form, and in buton's onclick event place:
ADOTable1.Filter := 'Cyl =4';
ADOTable1.Filtered := not ADOTable1.Filtered;
Try to check on last displayed 3 rows. Try to scroll grid - and all is OK.
Then, click to button (apply filter/change dataset's data), and try sane procedure (check on to 3 bottom displayed rows for example). Now try to scroll! cell colouring and checkboxes aren't synchronised with data. Try to check records from first to last displayed "in page" + n additional, and click "show selection". In selection are displayed only rows from "fisrt page".
Can You please invastigate nad solve this bug. This behaviour is very important part of my own framework for business applications.