(Примечание: хотя версия для клонирования потенциально полезна, для простой мелкой копии лучше использовать конструктор, о котором я упоминал в другом посте.)
Насколько глубокой должна быть копия, и какую версию .NET вы используете? Я подозреваю, что LINQ-вызов ToDictionary, указывающий и ключ, и селектор элемента, будет самым простым способом, если вы используете .NET 3.5.
Например, если вы не возражаете против значения, являющегося мелким клоном:
var newDictionary = oldDictionary.ToDictionary(entry => entry.Key,
entry => entry.Value);
Если вы уже ограничили T для реализации ICloneable:
var newDictionary = oldDictionary.ToDictionary(entry => entry.Key,
entry => (T) entry.Value.Clone());
(Это не проверено, но должно работать.)