Problem is ItemRenderer Re-use
This problem occurs because Flex reuses itemRenderers. In other words, you don't get one itemRenderer per row on your datagrid. And, to complicate the problem, you only have itemRenderers for the visible rows. So, when you scroll down to where your upper row's checkbox is no longer visible, and then scroll back up, all sorts of weird things can happen as itemRenderers are re-used.
I would give you some links to read up on this, but I don't have 50 posts yet, and am therefore not able to post them. So, just Google "flex datagrid itemrenderer reuse" and you will get some good information on overriding the set data method.