Единственное, что кажется мне сразу очевидным, - это то, что статический класс - это просто набор функций с областями видимости (здесь явно не используются «методы»), а синглтон - это то, что вы можете создать, даже если у вас есть только 1 . 1> 0.
Вы можете передать синглтон в качестве аргумента чему-то, что ожидает объект определенного интерфейса, вы не можете никуда передавать статический класс (кроме как с помощью некоторой хитрости отражения)