The PyMongo documentation didn't make it clear that a resulting document produced in an upser would be constructed from both the filter and the update parameters passed into the method.
For comparison, the server doc is pretty clear in that regard:
If upsert: true and no documents match the filter, db.collection.updateOne() creates a new document based on the filter criteria and update modifications.