I think that you have fallen foul of a JavaScript oddity that only applies to context variables in memory. If you tried the same thing with some other storage mechanisms, you would get the result you expect.
The reason is that assigning in-memory objects happens by reference - in other words, it is the SAME data, not a copy.
If you want to be certain that you have a copy, there is a RED utility method for that - it does a shallow copy. Sorry, I can't remember the method name off the top of my head.
I am not sure about that, at least not with the standard file storage context. At run time it is still in memory, it is just saved to disc occasionally and restored on restart.
let CopyOfOriginal = RED.util.cloneMessage(context.get('CopyOfOriginal')) || [];
cloneMessage, uses the clone package, that walks the object, and guards against circular references.
JSON.parse(JSON.stringify(OriginalObject)) whilst works, can get into trouble with circular references, may also be not as performant, having to construct a string before it can create another object.
although in everyday use - you might not measure such difference, but there will be.
I don't think cloneMessage is a deep copy. JSON stringify/parse, as Nick says isn't always type safe and indeed may well fail - always wrap in a try block.
True deep copies in JavaScript are not simple. But there is plenty written online about the subject.
That's why I said "some". It very much depends on the mechanism used.