Der Grund ist, dass eine solche Wertänderung auch durch z.B. die Leertaste ausgelöst werden kann, wenn die Komponente den Fokus hat. Deshalb wird dabei dann OnClick ausgelöst. OnClick beinhaltet dann die verschiedenen Möglichkeiten der Umschaltung.
In der Regel ist das ja auch sinnvoll, da eine CheckBox einen Status darstellt und entsprechend des Status etwas eingestellt wird.
Dass es nur bei denen passiert, die checked sind, liegt daran, dass bei den anderen keine Änderung des Wertes stattfindet und der Versuch daher direkt abgebrochen wird.
Wenn du dir selbst eine Komponente ableitest, kannst du darin ClicksDisabled auf True setzen, dann wird OnClick nicht mehr ausgelöst.
Einfacher ist, wenn du ein privates boolsches Feld deklarierst und das auf True setzt vorher. In deiner einen CheckBoxClick-Methode musst du dann nur noch schauen, ob das True ist. Und wenn ja, machst du einfach nichts.
// EDIT:
Warum hast du eigentlich mehrere CheckBoxXClick-Methoden?

Die machen doch eh alle das selbe...
Ich verstehe aber auch nicht so ganz warum das eigentlich ein Problem ist. Schließlich ist es doch korrekt, dass die Anzahl zurückgesetzt wird, wenn der Wert auf unchecked gesetzt wird. Du musst doch einfach nur das nicht selbst ein zweites Mal machen... (also einfach Zeile 41 weg und gut ists...)