The author helped me a lot. Here is a link to our conversation and my specific comment that I think pinpoints the issue - https://github.com/sinclairzx81/typebox/issues/1216#issuecomment-2774538352.
tldr; I was trying to run Clean straight out of MongoDb as a security measure - remove any properties that might have made it into the database that aren't in the schema. This is not possible out of the box with Typebox - you can never run "Clean" on an ObjectId. The author describes why much better than I can and I think he even gives hints on how to do it yourself. For me, I simply didn't find that functionality (using Typebox to run Clean, yet keep ObjectIds for use inside my api) worth the effort. Typebox is great for using Decode on incoming json and Encode on outgoing objects (converting to json). I only clean at these two times, and it's working great now. In both cases, all ObjectIds are strings before the Clean takes place.