Scale of Amplitude in FFT (Matlab)
The problem is likely to be your filter. Designing a very narrow filter is very hard; a very large order is required and even then, some responses may simply be unrealizable. Note that "narrow" here is relative to the Nyquist frequency. I don't know what your sampling frequency is, but let's assume 8000 Hz. Run this code:

fn=4000;f1=59;f2=61;w1=f1/fn;w2=f2/fn;
b=butter(5,[w1 w2],'bandpass');
freqz(b);


The command freqz plots the actual frequency response of the filter that was returned by butter. It is very important always to verify that your filters' response resemble what you had in mind -- that is, that they meet your requirements.

I got slightly better results using fir1 instead of butter. However, in your case, what I would try to do is to downsample the signal so that, relative to the Nyquist frequency, the filter is not too narrow. To see the effect, run this code:

fn=120;
f1=59;f2=61;w1=f1/fn;w2=f2/fn;
b=fir1(200,[w1 w2],'bandpass');
freqz(b)


You'll see a nice, narrow response with 0 dB gain at the center frequency and around -70 dB rejection out of band.