I agree the implementation in CMAttribute / CmCustomAttribute is questionable.
With existing rules, CmCustomAttribute value can be a STASH object.  Though that is another candidate for the label 'effectively immutable'.
I have added copies for this now, it is only very slightly slower for that (Coords and CoordSystems are the big ones).