Back the the days of .NET 1.1, you'd use a Hashtable to store values with a fast lookup using a key. Hashtable used a single array of "buckets", which stored the key, value, and a collision index. The index to the the bucket array is a transform of the hashcode of the key (unless there's a collision). Long story short, there was no stable ordering to the values in a Hashtable (technically, the order is super-important to the algorithm, but it's not useful on the outside).
Fast-forward to 2.0, we have the Generic Dictionary. It's algorithm is quite a bit different. It has an array of Entry<Key, Value>, a private nested class similar to bucket in the Hashtable. But, the "bucket" data is stored in a separate array of int, which holds the index into the Entry array for that hash. When you add something to a Dictionary, it is simply added to the Entry array, and the bucket array is the one that's updated and possibly re-ordered. Long story short, there IS meaning to the order you get from a generic Dictionary (using the enumerator). It's the order you added them. This subtle change adds alot of value to Dictionary in my opinion.
It was just a very interesting realization to me, and I thought someone else might find it useful.