Allora io ho dato un'occhiata al tuo codice e ti faccio degli appunti:

1. JButton ha già la possibilità di inserire un testo e un'icona (ci sono diversi costruttori se vedi le api puoi infatti inserire sia un'icona che un testo. Ovviamente per le dimensioni devi giocarci un po', ma di solito io preferisco non fissarla a priori, ma giocare un po' coi layout manager in modo da poter gestire anche i ridimensionamenti. Ma se cmq vuoi utilizzare il tuo componente nessuno te lo vieta.
2. puoi usare invece di MouseListener MouseAdapter: è una classe astratta che ti consente l'implementazione solo dei metodi che ti servono (in questo caso mouseentered ed exited) senza dover per forza dare l'implementazione per gli altri metodi, anche se tu la lasci vuota).

questo è il codice che ho fatto io (testato) vedi un po se funziona come vuoi tu. Ho fatto qualche modifica per avere un qualcosa da vedere, ma sono semplici le modifiche fatte

codice:
public class NoteButton extends JButton {

    private static final long serialVersionUID = 1L;

    Color color ;
    public NoteButton(final Color color) {
        this.color = color;
        setBorderPainted(false);
        setBackground(this.color);
        setSize(108, 108);
        ImageIcon img = new ImageIcon("note.png");
        int imgW = img.getIconWidth();
        int imgH = img.getIconHeight();

        JLabel i = new JLabel(img);
        i.setSize(imgW, imgH);
        i.setLocation(10, this.getHeight() / 2 - (imgH / 2));
        add(i);

        JLabel txt = new JLabel("Note");
        txt.setSize(120, 40);
        txt.setLocation(imgW + 15, 0);
        add(txt);

        this.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseEntered(MouseEvent arg0) {
                System.out.println("dentro mouseentered");
                setBackground(Color.GREEN);
                setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
              //  MainWindow.timerFlag = true;
            }

            @Override
            public void mouseExited(MouseEvent arg0) {
                System.out.println("dentro mouseexited");
                setBackground(color);
             //   MainWindow.timerFlag = false;
            }
        });
    }
}