Would it work better if you assigned CMC::msg to a variable instead of copy?
Copy will not work and fails silently if the field from which you are copying is not present on the current layout. It's possible that in the cases where your other scripts use perform script to call this script, that it is not the correct layout.
Copy is almost never a good script step to use. Not only does it have this limitation (Paste, and Insert steps also require the field to be present on the current layout), but copy destroys any data your user may have copied to the clipboard and this is can be very irritating and confusing to your users. Thus, set field and set variable make better options for moving data from one place to another in most cases.
Thanks! Set field worked. Never used that before. Made everything easier and cleaner.