My solution is different, and may be of help to you if you are still experiencing this issue. I have figured out a way to bypass the corruption of the CIM definition when attempting to create a new label class with ArcPy CIM. To test this out, you can use any layer those default class is named "Class 1." Instead of using arcpy.cim.CreateCIMObjectFromClassName('CIMLabelClass','V2') or arcpy.cim.CIMLabelClass() as suggested by other users, I used cimObject.labelClasses.copy().
It's a little awkward, but I hope it helps!
The code to try out is below:
import arcpy
p = arcpy.mp.ArcGISProject('CURRENT')
m = p.listMaps('Map')[0]
layer = m.listLayers("Your Layer Name Here")[0]
cimObject = layer.getDefinition('V2')
lblClasses = cimObject.labelClasses
for lblClass in lblClasses:
if lblClass.name == "Class 1":
nlc_index = cimObject.labelClasses.index(lblClass)
lblClass_copy = cimObject.labelClasses.copy()[nlc_index]
cimObject.labelClasses.append(lblClass_copy)
layer.setDefinition(cimObject)
break
cimObject = layer.getDefinition('V2')
lblClasses = cimObject.labelClasses
for lblClass in lblClasses:
if lblClass.name == "Class 1":
nlc_index = cimObject.labelClasses.index(lblClass)
if nlc_index != 0:
lblClass.name = "Dummy"
layer.setDefinition(cimObject)