@michaelcahill, I got bitten today because WT_ERR_TEST doesn't clear ret (WT_ERR_BUSY_OK and WT_ERR_NOTFOUND_OK do).
I changed WT_ERR_TEST to clear ret and then implemented the other functions using it.
I don't feel strongly about this, if you don't like it, I'm good with just throwing it away.