It has the same problems as a global variable.
It gives you global accesses to mutable state.
Anything that uses the Singleton is now tightly coupled to it.
Try and avoid tight coupling. It makes the code hard to update. Hard to test.
If your choice is a Singleton or global variable. Than at least Singleton provides lazy initialization.
But usually it is best to avoid globally accessible mutable state and pass in all dependency to your code via parameters or in the constructor. This decouples your code from specific instances.
Note: Global access to constant state is not such a big deal.
Here is a good talk about the subject done by Google Engineers:
http://www.youtube.com/watch?v=-FRm3VPhseI