List implements IReadOnlyCollection interface and provides the AsReadOnly() method which returns ReadOnlyColle
First of all it's not that AsReadOnly() was added because IReadOnlyList isn't good enough -- IReadOnlyList is only available starting with .NET 4.5 while AsReadOnly() method exists since .NET 2.
More importantly: AsReadOnly() and IReadOnlyList serve very different purposes.
ReadOnlyCollection is meant for implementing object models, for example things like Dictionary and Dictionary. This is for scenarios where consumers shouldn't be able to change the contents while the producer can. It works in tandem with Collection which provides hooks for the owner to validate changes or perform side effects when items get added.
IReadOnlyList on the other hand is simply an interface that provides a read-only view of the collection. Methods can use it in order to say "I need a random access collection but I don't need to be able to modify it". For example, a BinarySearch method might look like this:
public int BinarySearch(IReadOnlyList list, int start, int length);
In order to make this method useful, it's required to be able to pass in any List. Forcing to create wrapper collections would be prohibitively expensive.