La prima cosa che farei è fare in modo che la tua classe DatabaseManager implementi l'interfaccia IDisposable. La classe xxxConnection (nel tua caso MySqlConnection) fornisce il metodo Dispose() per liberare le risorse utilizzate. Per evitare lavoro inutile al Garbage Collector, sarebbe corretto fornire il metodo Dispose() alla tua classe in modo che chiami Dispose() di tutte le tue classi "Disposabili" (che neologismo...

) in questo modo:
Codice:
public class DatabaseManager : IDisposable
{
// codice della classe
public void Dispose()
{
cn.Dispose();
GC.SuppressFinalize(this);
}
}
Te l'ho semplificata un po'... Per maggiori dettagli cerca IDisposable su MSDN.
La funzione IsOpen() la semplificherei così:
Codice:
public bool IsOpen()
{
return (cn.State == ConnectionState.Open);
}
Per quanto riguarda la gestione delle eccezioni, ti consiglio questa lettura:
http://msdn2.microsoft.com/en-us/library/ms954599.aspx
Ciao