I wanted to ask a few questions to get a bit more info about what you feel may be unexpected behaviour. With some additional details, I's be happy to take another look on our end and pass back any insights or suggestions moving forward.
Have you tested this on another private metafields and does it behave the same way? I would suggest using the app to first create a new metafield, then query for it, and finally update it. This will help to confirm if everything is working as expected.
Is the app being used the same app that originally created this private metafield? If not, an error would be expected behaviour - private metafields are only accessible to the app that creates them. If unsure, a good test is to try querying for the private metafield and watch for similar errors.
If this is the same app that created the metafield and/or that query is successful, but you still cannot complete a successful privateMetafieldUpsert mutation - please replicate the request shared prior and log the following details to share in this thread: error code , error message, x-request-id response header value.