I borrowed your BMP display code and noticed the image was slightly offset. I had to change (50-j) to (49-j) in the line below. Reviewing the code, this looks like it is what it should be (to me anyway :-).
for(byte j=0; j<50; j++) d[j]=~bmp[(129+i*52)+(50-j)]; // INvert and flip
I borrowed your BMP display code and noticed the image was slightly offset. I had to change (50-j) to (49-j) in the line below. Reviewing the code, this looks like it is what it should be (to me anyway :-).
for(byte j=0; j<50; j++) d[j]=~bmp[(129+i*52)+(50-j)]; // INvert and flip