Probably not much of a use case, but I think we'd want to check if the object implements ICacheKey before we check before IEnumerable.  Consider

class StevensList : IEnumerable, ICacheKey
{
	ICacheKey.string BuildCacheKey(CacheKeyBuilder builder)
	{
		var orderedList = this.OrderBy(i => i);
		return builder.By(orderedList);
	}
}