To elaborate on Zak’s answer a little, the issue stems from these four edges at the corners of the mesh:
When you use the Bevel modifier with the Angle limit method, only sharp edges will be beveled. These four edges are certainly not sharp—the faces they’re connected to are completely flat—so they don’t get beveled at all. This produces corner geometry that looks like this:
Of particular note is the fact that this edge loop still only contains exactly four vertices:
Since the bevel didn’t actually add any additional geometry to this edge loop, subdividing it will distort it into a circle, for the same reasons that a simple four-vertex plane will approach a circle after subdivision.
One way to fix this is to set the Bevel modifier’s limit method to None. This causes all edges to be beveled, even ones that are completely flat, which adds the necessary additional geometry at the corners:
Now all the edge loops have extra vertices, reducing distortion when subdivision is applied:
Note that this only works okay because the upper rim is completely flat: if it were curved, then the additional geometry would cause pinching at the corners, and you might need to find a different approach.
As a final note, while this solution works okay for such a simple example, but in general, beveling all the edges might be too extreme. In situations where you want more control, you can use the Weight limit method and explicitly mark which edges you want to be beveled using CtrlE ▸ Edge Bevel Weight. For example, this can be used to mark everything except the corners as edges to be beveled:
With subdivision, this produces a nice, round shape: