Incorrect dominant frequency from FFT
What went wrong?



How do you know it's wrong? Could be that you have way more energy in the first harmonic than at the fundamental. 
Debug rule #1: test the code first with a signal where you already know the answer (say a mixture of a few sine waves). Once you have made sure that your code produces the expected result EXACTLY you can move on to real world signals. 
Your frequency resolution seems insufficient. You only have 10 Hz of resolution, that will not give a lot of detail at 30 Hz. Keep in mind that the energy at each particular frequency will be "smeared out" across a few neighboring FFT bins, so you want enough resolution to see that.
Your lowpass seems way to steep. Together with filtfilt you get a 20th order filter which will have enormous amount of time domain ringing which filtfilt() unfortunately truncates and the truncation can create significant errors