I have found here that;
It is possible that in the case of a duplicate-key error, a storage engine may perform the REPLACE as an update rather than a delete plus insert, but the semantics are the same.
Which would return 1 row affected on what should otherwise be a delete and insert.
I am now checking if an entry_id was provided to the function. ie. if I was expecting an insert.
if ( 1 == result || isset( $entry_id ) )