When the single class needs state. Singletons maintain a global state, static classes do not.
For instance, making a helper around a registry class: If you have changable hive (HKey Current User vs. HKEY Local Machine) you could go:
RegistryEditor editor = RegistryEditor.GetInstance();
editor.Hive = LocalMachine
Now any further calls to that singleton will operate on the Local Machine hive. Otherwise, using a static class, you would have to specify that Local Machine hive everytiem, or have a method like ReadSubkeyFromLocalMachine.