Will `/scoreboard players tag` remove tags from ineligible players/entities that were previously tagged?

No, the tag won't be removed automatically. You can test this yourself by placing the following command in your command block chain:

/tell @p[tag=InAir] Jumping

After jumping the first time, you will continuously receive the "Jumping" message, even after you return to the ground.

What you need to do, similar to what you've done in the past with scoreboard objectives used in boolean tests, is clear the tags of everyone before reapplying them to those you want tagged. In your example, you'd use the following command:

/scoreboard players tag @a remove InAir

which is the obvious counterpart to the the add version of the command, but that's not stated in the wiki.

I should note that I haven't tested to see if the remove version also accepts the data tag, but I suspect it does. That would allow for some interesting logic.