I realize this is a pretty old thread, but I think I've figured out what might have been causing a lot of the confusion in there after running into this issue myself...
Basically, the "opengl" renderer in older versions of MATLAB seems to have a bug that, when a custom XTickLabel is set, the axis exponent is still displayed. This does bug does not appear to happen with the "zbuffer" or "painters" Renderers.
The size of the "B" matrix matters because when you add a very large graphics object to a plot, MATLAB automatically switches the renderer over to opengl (presumably because of the better performance vs. painters or zbuffer).
So, when you execute this code in R2011b, you get no exponent on the axis:
But then if you flip the renderer to opengl, the exponent will appear:
You can get rid of it again by going back to painters or zbuffer:
I've tested this in R2011b (where the described issue exists) and in R2015a (where it does not), both on 64-bit Windows.