The ConvertTo<T>
API’s purpose is to convert it into the target type, if it can be cast into the target type it will just return it as it’s more efficient.
If you wanted to clone the Type you can use:
var clone = TypeSerializer.Clone(obj);
Which is a deep copy that essentially serializes/de-serializes it. Alternatively you can use:
var to = from.CreateCopy<To>();
Which for reference type does:
var to = typeof(To).CreateInstance();
to.PopulateWith(from);
Which was the behavior you had previously, essentially a shallow copy.