Да, это может быть такая ситуация. Чтобы избежать этого, используйте LOCK / UNLOCK TABLE
$user = User::find(1);
if($user['balance']>250) {
User::lockTable(); // method name/use depends on your framework
// Here for example long loop
$user->update([
'balance' => DB:raw('balance - 100')
]);
User::unlockTable();
}