IF()の使用はうまくいくはずですが、それは良くありません:
INSERT INTO table1 SET
field1=aa,
field2=bb,
field3=cc
ON DUPLICATE KEY UPDATE SET
field1 = IF( field4 = zz, aa, field1 ),
field2 = IF( field4 = zz, bb, field2 ),
field3 = IF( field4 = zz, cc, field3 )
条件が満たされた場合にのみ新しい値でフィールドを更新し、そうでない場合は古い値を保持します。