I think I may have something. I built the bubble the same way you did with the two separate shapes and the merge.
In addition to centering the anchor point of the type to its absolute center, I have master anchor point of the shape layer set to the position of the rectangle:
content("Rectangle 1").content("Rectangle Path 1").position
The text position expression brings in both the position of the entire shape layer and the position of the rectangle.
pos = thisComp.layer("Shape Layer 1").transform.position;
off = thisComp.layer("Shape Layer 1").content("Rectangle 1").transform.position;
[pos[0] + off[0] , pos[1] + off[1]]
“pos” named for the position, “off” for offset
13238_center.aep.zip
Is this what you were looking for?