That's exactly what's supposed to happen when the bolded lines execute:
Select Case CC.Tag ' tag of control being exited
Case "CH1"
If CC.Checked Then
ccCH2.Checked = False
ccATnum.Range.Text = "AT1"
ActiveDocument.Bookmarks("HIDE").Range.Font.Hidden = False
Else
ccCH2.Checked = True
ccATnum.Range.Text = "AT2"
ActiveDocument.Bookmarks("HIDE").Range.Font.Hidden = True
End If
Case "CH2"
If CC.Checked Then
ccCH1.Checked = False
ccATnum.Range.Text = "AT2"
ActiveDocument.Bookmarks("HIDE").Range.Font.Hidden = True
Else
ccCH1.Checked = True
ccATnum.Range.Text = "AT1"
ActiveDocument.Bookmarks("HIDE").Range.Font.Hidden = False
End If
'Case "some other control's tag"
' other code
Case Else
Exit Sub
End Select
What may be confusing is that this doesn't happen until the cursor exits the content control (because this is in Document_ContentControlOnExit, which gets
started when the cursor is about to exit). So when you click the check box, but before you hit the Tab key or click another control, you'll see either both boxes checked or both boxes unchecked.
It is possible to make these check boxes respond immediately instead of waiting for the exit. Greg Maxey has an article at https://gregmaxey.com/word_tip_pages/content_control_custom_events.html that
shows how to do it. But this is 400-level wizardry, not really for a novice VBA programmer.