Классы System.Collections.ObjectModel полезны для представления ваших коллекций внешнему миру.(Под внешним миром я имею в виду код, не совместимый с вашим кодом.)
Поэтому используйте универсальные классы коллекций в своем коде, но оберните их в коллекцию, ReadOnlyCollection или ObservableCollection, когда вы хотите предоставить еговнешний мир.
Чтобы обернуть коллекцию в коллекцию с ключами, KeyedCollection можно использовать как базовый класс для помощника.