Okay, I found this function UEngine::CopyPropertiesForUnrelatedObjects(UObject* OldObject, UObject* NewObject, FCopyPropertiesForUnrelatedObjectsParams Params) serves my purpose quite well, except that it’s over-doing what I want: I want to just copy an instanced property to CDO but this function does it for the whole actor.
For a single instanced property, I found DuplicateObject can do most of the work. The problem with this function is that is cannot handle nested instanced properties.
For example, class A is instanced, and it has a B class member as an inner instanced property. Using DuplicateObject cannot copy B in a nested way.