Thanks for the sample application.
It seems to me that your logic is a little wrong, and as I am not sure how you want the control to behave when there is a mixture of checked and unchecked items in the list, I'll just point you to the first failure in your logic.
If you modify the SetCheckHeader() method and move the return statement so that it's within the innermost if statement, then you should have some more "reaction" within the control.
Setting a breakpoint on that method should help you see the failure in the logic.
Hope this helps,