Bella forza: è perché il bottone non ha il focus! Il focus è... con un esempio pratico, quello stato del bottone (o di un altro componente) per cui la pressione della barra spaziatrice (o di invio, in certi sistemi) ne attiva una proprietà. Se hai più di un componente, non è detto che il focus sia sul tuo bottone a cui hai attacco il KeyListener. Java tra l'altro, non prende di default <ENTER> per scatenare l'actionPerformed (prende però la Barra Spaziatrice), ed è quello il motivo per cui bisogna usare un KeyListener sul bottone.
Se tu prima pigi il bottone in questione via mouse, gli hai anche assegnato il focus, per cui la successiva pressione di <ENTER> correttamente ne scatena nuovamente l'azione collegata