Your $set is not terminated correctly so your following $inc is actually part of the $set object rather than being another object. Since top level field cannot start with $ then you get the given error.
It would be to terminate $set at the right place, just before the $inc. You do that by moving the last closing brace } just before the comma that is supposed to separate the $set object from the $inc object.
The issue here is that you are mixing two different syntax types here.
Update takes either regular modifiers ($inc is one of those) or aggregation syntax, if you are using pipeline syntax, which you are ([]).
So your $set for field health is fine, but you are not allowed to mix in $inc operator nor $pull. What you want is to express the whole thing as an aggregation: