I realize that this is coming in late, but let me add some context. The only purpose this type was designed to serve was to be used as the parameter type of a method or init that accepts a dictionary literal as an actual argument, when you don't want to lose the specified syntactic order, hash the keys, allocate new storage, or even necessarily have hashable keys. In other words, it is used for its syntactic qualities. Since "dictionary literal" is the name of the syntactic element this type supports, use sites of this type name read well.
Actually, @gribozavr gave a much more complete explanation of all this in the original thread and I think if people were still confused after that, instead of reading his post they probably read the documentation for the type, which as he points out does not at all explain the type's purpose.
I can see that if you wanted to store one of these things or create it and then pass it to a method later, it might make sense to call it something else. KeyValueBuffer would not be terrible. It is like an UnsafeBufferPointer without the Unsafe part, and—since it doesn't expose reference semantics—without the Pointer part.
Correction: 2016-05-28 the following statement is wrong; it holds an array and could easily be made mutable and extended.
I wrote:
That is not possible without compromising performance. Right now it simply refers to the memory the compiler created for us and doesn't do any storage management, COW, etc.