The text layer is rendered to the nearest pixel, hence the little jumps, whereas shapes are vectors and I think they apply anti-aliasing. You could try drawing the text as a path instead: