Класс был объявлен не как статический, а как закрытый (другие классы не могут его наследовать). Это сделано потому, что рассматриваемая одноэлементная реализация знает, как создавать экземпляры только этого конкретного класса.
Если вы подкласс это:
public class Child: Singleton { ... }
Дочерний класс все еще будет создавать экземпляр базового класса:
Child.Instance
будет по-прежнему возвращать экземпляр Singleton), что приведет к запутанному коду.
Readonly повышает читабельность кода и предотвращает ошибки в будущих модификациях класса.