There are several situations where I want to have an
public static IEnumerable<T> GetValues<T>(this T e) where T : Enum
where T : Enum
This is the perfect solution. .Net does not offer a strongly-typed Enum.GetValues at this time. People will only take a few seconds to understand what this does because one would expect .Net to offer a strongly-typed enumeration of Enums of one type right now.
You're using GetValues correctly as MSDN suggests.