Ситуация вполне объяснимая и вполне возможно тут виноват компилятор, которым компиляли сам PHP. Ваши числа выходят за размер нормального 4-байтного integer и требуют применения длинного 8 байтного формата.
Насколько я понимаю, парсер это дело плохо распознает и делает их 4 байтными со всеми вытекающими последствиями, которые точно соответствуют описанным. Такая же ситуация была в BP 7.0, когда умножался один двухбайтный integer на другой и результат получался больше максимального. Компилятор некорректно делал преобразование.
Мы выходили из ситуации явным применением более длинного типа данных или операциями с плавающей точкой.
Я не спец по PHP, но думаю завести явно переменную длинного типа или с плавающей точкой можно и там, а потом использовать в вычислениях и таким образом обойти багу.