I would try to implement a generic, uhh, non- generic INamedPropertyone that could perform the necessary operations:
interface INamedProperty
{
Type ContainingType { get; }
string Name { get; }
Type ReturnType { get; }
void CopyTo(object obj, INamedProperty property);
}
Then implement them in a generic NamedProperty:
class NamedProperty<T> : INamedProperty { ... }