When does a '3 month' period in a membership status actually roll over
The calculation of next or past 3 months was decidedly dodgy for relative dates in searches (which is why these have been replaced with 90-day intervals in v4.7). The same method may apply for the membership status update.  

If I remember correctly, it calulates the number of days in three calendar months starting with the current month.

So I think you may find that for an end date of March 31, CiviCRM will change the status after 31(March) + 30 (April) + 31(May) = 92 days, which should be 2 July.