non provare ad assegnare il valore alla tua colonna all'interno delle istruzioni CASE WHEN poiché lo stai già facendo.
il CASE WHEN valuterà il valore che soddisfa la condizione.
prova questo codice
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
Ho rimosso le assegnazioni alle colonne pagate e dovute all'interno dell'estratto conto.