nie próbuj przypisywać wartości do swojej kolumny wewnątrz instrukcji CASE WHEN, ponieważ już to robisz.
Przypadek CASE WHEN zwróci wartość, która spełnia warunek.
Wypróbuj ten kod
UPDATE payments SET
total = :total,
paid = (CASE WHEN paid > :new THEN :new ELSE paid END),
due = (CASE WHEN paid < :new THEN (:new - paid) ELSE due END)
WHERE id = :id
Usunąłem przypisania do płatnych i należnych kolumn w opisie sprawy.