The typical usage pattern of ReserveDestination is to explicitly KeepDestination, or ReturnDestination when it's detected it will not be used.
Implementers such as myself may fail to complete this pattern, and could result in key re-use: #15557 (review)
Since ReserveDestination is currently only used directly in the CreateTransaction/CommitTransaction flow(or fee bumping where it's just used in CreateTransaction), I instead make the assumption that if a transaction is returned by CreateTransaction it's highly likely that it will be accepted by the caller, and the ReserveDestination kept. This simplifies the API as well. There are very few cases where this would not be the case which may result in keys being burned.
Those failure cases appear to be:
CommitTransaction failing to get the transaction into the mempool
Belt and suspenders check in WalletModel::prepareTransaction
Alternative to https://github.com/bitcoin/bitcoin/pull/15796