Al utilizar la función diff() del objeto Datetime en PHP me surgía un error con los meses que no tenían 30 días, en mi caso particular calculando una diferencia extra de un mes más.
Tras investigar el problema he encontrado el bug y la solución al problema en mi caso particular trataba de buscar la diferencia en meses entre dos fechas sin indicar la hora y la solución es tan simple como indicar en la fecha una hora cualquiera siempre y cuando sea mayor a 2, es decir, con los siguientes ejemplos el cálculo es incorrecto: «2013-05-31», «2013-05-31 01:00:00», sin embargo, como he dicho indicando una hora superior a 2 sin funciona, es decir, para que el cálculo sea correcto: «2013-05-31 02:00:00», «2013-05-31 12:00:00».
Aquí puedes ver el ejemplo completo: