CheckedChanged is triggered when Checked state changes. Changing from Checked to Unchecked is a change, and changing from Unchecked to Checked is a change too. This is the reason why you see two notifications.
It looks like your code can already deal with that. But you could get read of "foreach" cycle if you use RadioButton control instead of Checkbox. If you select any RadioButton, all other RadioButtons in the same container will be uchecked automatically. If you have two separate groups of RadioButtons on the same form, you can put one of the groups (or both) inside GroupBox or Panel.