This looks OK to me, and if it fixes a regression I don't think we need a test case (though it never hurts).
I don't think StorageImpl_LockRegionSync should be filtering these codes (the caller needs to know the difference between a failure and unimplemented function), though we should probably also fix the call inside StorageImpl_LockTransaction, the check in UnlockTransaction, and the check in StorageImpl_LockRegionSync. And it seems we also check for E_NOTIMPL when we call LockTransaction..
Maybe an HR_IS_UNIMPLEMENTED macro would be warranted?