My algorithm would put it somewhere around 3 and 2 as well, although there is some room for judgement with the "high" and "mid" definitions so it could vary some. I'm interpreting high 4.0 to be 3.95, mid 4.0 to be 3.75, and high 3.5 to be 3.45.
The scores would seem to indicate that the competition wasn't as strong as you thought (or my interpretation of your high/mid is off), or it is just one of those things where you and your partner matched up well and performed better than expected against the opponents.
Using Dynamic NTRPs to identify expected results will give you an idea of what might/should happen, but the dynamics of any given match and specific strengths/weaknesses amongst the participants and how they match up can result in natural variance both better and worse than expected by several games or more. In the Estimated Dynamic NTRP reports I do, I regularly see best to worst match ratings vary by 0.4 to 0.5 and even more in some cases.