Okay, I inspected the FramingConstraints on the actual view and that revealed the problem. For whatever reason, the right and bottom offsets were non-zero. If I set them all to zero immediately after calling the framing method then it works correctly.
leftFraming: #fixedParentLeft; leftOffset: 0;
rightFraming: #fixedParentRight; rightOffset: 0;
topFraming: #fixedParentTop; topOffset: 0;
bottomFraming: #fixedParentBottom; bottomOffset: 0
Anyone know why this is necessary? `FramingConstraints>>initialize` initializes all the offsets to 0 so they must be getting mucked with dynamically.