Return IEnumerable from a private method; use Dictionary or anon. type?
I think the cleanest way to optimize it and to use only one loop is to first get the values with a select, create key/value pairs there and then filter by value:

private static IEnumerable&lt;KeyValuePair&lt;string, string&gt;&gt; GetPropertyValues(MyClass myClass) {
   return
        PropertyDictionary
        .Select(kvp =&gt; 
            new KeyValuePair&lt;string, string&gt;
            (
                kvp.Key,             
                (string)kvp.Value.GetValue(myClass, null)
            )
        )
        .Where(kvp =&gt; !string.IsNullOrEmpty(kvp.Value));
}