Hey Mark,
If you look at the parameters of Deactivate() you'll see that you have it backwards:
/* Deactivates the product on this computer. Set erasePkey to 1 to erase the stored product key, 0 to keep the product key around. If you're using deactivate to let a user move between computers it's almost always best to *not* erase the product key. This way you can just use Activate() when the user wants to reactivate instead of forcing the user to re-enter their product key over-and-over again.
Returns: TA_OK on success. Handle all other return codes as failures.
Possible return codes: TA_OK, TA_FAIL, TA_E_PKEY, TA_E_INET, TA_E_PDETS, TA_E_COM, TA_E_ANDROID_NOT_INIT, TA_E_NO_MORE_DEACTIVATIONS*/TURBOACTIVATE_API HRESULT TA_CC Deactivate(char erasePkey);
The reason CheckAndSavePKey() is failing is because another product key already exists on the computer.