When cloning objects whose runtime time differs from the declared type (as would be the case with a derived type using polymorphism) the resulting object is of the declared (less-derived) type instead of the runtime (derived) type.
The attached zip contains a short test program which demonstrates the issue.
clonetest.zip