The general purpose duplication trait is the Clone. The Copy trait is much more restrictive. It would be helpful to read once the entire document of the Copy trait.
Trait objects don't have a size known at compile time: they take on the size of whichever underlying type is backing them. This limits where and how they can be used in many ways. In particular, the compiler needs to know the size of a function's return type in order to write correct machine code for the function call, so trait objects cannot be returned directly from a function.
Because Clone returns the object directly, unboxed, it can't be implemented for these so-called "unsized" types, like trait objects-- The compiler would need to know how much memory to reserve for the return value.
If you have an Box<dyn FooTrait>, then you don't know what the underlying type is, but the clone method from the Clone trait returns that underlying type directly. You can't call methods whose return type you don't know.