Почему не выполняется условие WHERE?
Потому что

    $bd->Query("SELECT COUNT(*) FROM users_nykfageubf WHERE p = '$p' AND promo_new=1"))


всегда возвращает true - запрос выполнен успешно, а не количество найденных строк

Кстати два запроса следует объединить в один:
$bd->Query("UPDATE users_nykfageubf SET balance=balance+10, promo_new = 0 WHERE p = '$p' AND promo_new=1");
а в качестве провереи использовать более быстрый запрос:
$stmt = $bd->Query("SELECT 1 FROM users_nykfageubf WHERE p = '$p' AND promo_new=1 LIMIT 1");
if ($stmt->rowCount() > 0) {
    ...........
}
По хорошему, все три запроса надо объединить в один, переписать с плейсхолдерами и проверять mysqli::$affected_rows или PDOStatement::rowCount после запроса. Так можно избежать состояния гонки.