Bren,
I think you're handling a difficult situation very well. It may be a bit chicken and egg with the race selections for some teams though (I'm thinking Swim and Tactics teams) - the captains would probably like to know who exactly is in their team so that they can decide on races. Also it requires the freebooters to have to bring a couple of races/rosters in case they are drawn on a team that already has their preferred race(s). For this reason it would be better to assign them early, but as you say that's not fair on the freebooter who misses out being in a team. Tough one.
Regarding the two freelancing freebooters, would it be better to have each as the auto pick for Matchups 1 & 2, with each freebooter then drawn against a random opponent from the other team, and then proceed as normal? This would mean each team now has one of their players randomly removed from the lineup (as per everyone else). It's just that "
Captains can never choose for the freebooters to play during the later phases of the picking process, they must always choose another match where possible." seems a bit clunky as a forced mechanic.
Keep up the good work, and if there's anything I can do to help (short of dropping out to even up numbers

) let me know.
----------
"Freebooters" might be a tricky term to use for both the two guys who permanently join teams and also the two who join different teams each round. Maybe "Journeymen" for the ones who permanently join teams, and "Freebooters" for the ones who change teams?