The problem , not a bug, is as mentioned in the first post in that thread you linked. It is not a bug because objects are passed by reference.
I want to save some of the Freds from an array of them at the point that they are going to change, let the originals change without changing the 'backup copy' and then restore the 'backup copy' to the original for an Undo. Quickly not using a file system or database which is overkill.
It may well be possible to get around it with complicated coding etc., however I do note that by splitting the Type at the point of saving/copying, into its constituent parts and using normal variables and then reconstituting the Type when using the Undo, will work, but sort of defeats the attaching of the type to an array.
I find it difficult to believe that there is not a simple solution (CopyByValue) or any other name you can think of that will dissociate the two copies i.e. by value not reference. There should be at least half a million people could use it.
I suppose I could write a Function to split the type and reconstitute it called a bodge.