Я думаю, что тут проблема в race condition. К примеру, на балансе 1000р. Пользователь запускает одновременно два запроса на вывод этих 1000р., оба скрипта примерно в одно время проходят проверку на наличие средств на балансе и потом спокойно себе списывают 1000р. два раза (или три, как повезет))