Как правильно списать баланс в базе?
Начните вот с этого:
$rsMyCredits = $objDBCD14->queryUniqueObject(
    "SELECT Balance FROM tbl_users WHERE UserId = '" . $rs->UserId . "' FOR UPDATE"
);
Похоже больше на гонку - когда запрос A приходит позже запроса B.
Решаются такие проблемы индивидуально, в зависимости от остальной архитектуры грубо говоря ичего-то универсального тут нет.
Касаемо Вашей ситуации, мне лично непонятно, каким образом очерёдность запросов может повлиять на результат, т.к. в моём понимании текущей ситуации баланс это либо сложение либо вычитание, и ничего особо страшного не будет, если будет  -1 -2 -3 +10  а не +10 -1 -2 -3   итог то будет один.

Можете слать баланс ДО и какой должен быть ПОСЛЕ и все изменения проводить скажем раз в N секунд, а до этого просто всё собирать в некую очередь для дальнейшей сортировки/понимания кто что делает и когда, во время которой отказывать в запросах, если выполнение долгое и т.д.