Как из вот этого:
REPLACE works exactly like INSERT, except that if an old row in the table has the same value as a new row for a PRIMARY KEY or a UNIQUE index, the old row is deleted before the new row is inserted
следует вот это:
Вообще, по здравому смыслу REPLACE не может давать duplicate error т.к. он в этом случае делает UPDATE.