A friend told me about a blog post stating that DontDestroyOnLoad is implemented not by persisting the object between scenes but actually doing a deep copy into a new instance in the new scene, and then deleting the original object. Is that true? If it is, it would have ramifications about fragmenting memory across scenes, especially singleton classes that hold a lot of data. Can someone from Unity please confirm?

Short answer is No. Unity simply tags the objects not to be destroyed, then leaves it alone when destroying all GameObjects in the scene.

Unity is highly optimised for most things. Its far easier simply not to call destroy on something then to copy it. Especially considering the inherent problems doing a deep copy. As I understand it Unity has no built in mechanism for a deep copy.