не се опитвайте да присвоите стойността на вашата колона в операторите CASE WHEN, тъй като вече го правите.
CASE WHEN ще изчисли стойността, която отговаря на условието.
опитайте този код
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
Премахнах присвояванията към платени и дължими колони в извлечението на случая.