En realidad en el primer post estabas cerca, el tema es que lo que no puedes poner es una sentencia DML sobre la misma tabla, sino que debes operar sobre los mismos campos... con las pseudovariables.
Código SQL:
Ver originalCREATE TRIGGER tr_actualiza_precio BEFORE UPDATE ON tabla_precio FOR EACH ROW
BEGIN
SET NEW.precio_ultimo = OLD.precio;
END