Is it bad coding practice/design to make a class which will only be instantiated once?
No, anche se solo una volta istanziato, hai bisogno di una classe per questo. Ma non supponete che sempre abbia bisogno di una sola istanza, ora e in futuro.
Supponiamo che tu faccia un gioco e tu abbia una classe di giocatore:
class Player {
...
}
Istanzerai una classe di giocatori nel tuo gioco e userai sempre lo stesso oggetto. Niente di male.
Tuttavia, non farne un Singleton! Oggi progetta il tuo gioco e pensi "Beh, sarà sempre essere un gioco per giocatore singolo. Userò un Singleton per il mio giocatore". Ma nella versione 2, potresti voler implementare il multiplayer e poi ti troverai nei guai. Dovrai riscrivere e adattare un sacco di codice, perché il tuo design non supporta la creazione di istanze di più giocatori.
Lo stesso è con le cache. O logger. O interfacce di rete. Oggi pensi che ne avrai solo bisogno, sempre, di sicuro. Ma in una versione futura è necessario aggiungere un secondo. Sii consapevole di questa situazione.