You could try a scale expression like this, to counteract the scaling of the parent shape layer:
s = parent.scale;
[value[0]/s[0],value[1]/s[1]]*100
You might need to move the text layer’s anchor point to the bottom of the shape layer to keep gap from changing size as the shape scales.