The Exception class defines property Data which is of type IDictionary. This means that any object that implements that interface can be returned by the getter. In fact, if you dig into the definition, you will see this explained in the comments:
// Summary:
//     Gets a collection of key/value pairs that provide additional user-defined information
//     about the exception.
//
// Returns:
//     An object that implements the System.Collections.IDictionary interface and contains
//     a collection of user-defined key/value pairs. The default is an empty collection.
public virtual IDictionary Data { get; }
It looks like the internal implementation of the class uses System.Collections.ListDictionaryInternal as the object that is actually used. If you look at the source code for that class, you will find that it implements the interface in question:
internal class ListDictionaryInternal: IDictionary 
{
    //...
}
So the interface represents a contract of what an object can do. The actual object returned is a concrete class that implements the interface.