I'll try to go through everything you posted and reply, let me know if I miss something.
I was just writing a long post explaining how roster transfer works and while looking at my code it hit me why players were "duplicated" in some non-existant roster positions. The players weren't being duplicated in the Players tab, it's just that the tool looked at the Player Count, fixed the according roster spots, but I forgot to code it so that it filled the rest of the spots with "-1". So teams that had more players in the To roster than in the From roster had some players filling extra spots, but being ignored as you noticed, because Roster Merge actually changed the Player Count value to the correct one. I've fixed this in the code, and the tool will now erase/reset to -1 any player spots beyond the Player Count. I'll release it in a few minutes.
I haven't put a "select all" because I want people to think before choosing a category. Things are easy to break if you move categories such as Status without transferring the according rosters, for example. You'll have to stop being lazy.
I know about the IsFA == 1 while TeamID1 <> -1 situation. But it's easy to fix. Do a good cleanup of the roster before using roster merge, by creating a filter in REditor (god I love this feature) for players with IsFA == 1 and change all their TeamID1 and TeamID2 to -1. You might also want to do the same for non PlType = 4 and non PlType = 6. There's only so many things Roster Merge can do, it cannot fix problems in rosters that are being overlooked. I may get some "roster cleanup" tools in Roster Merge soon though, such as fixing FA players to be proper FAs with no TeamIDs set, etc. But right now, I leave that up to roster makers.
So, in short, the tool DOES use the Team Rosters and NOT the TeamID1 to build the destination rosters. It only uses TeamID1 to determine which team to show in the Resolve Conflict window.
I can get full D-League support going, I don't know how much the tool does right now. I have seen players in D-League being considered as possible replacements in the Resolve Conflict window (I know HAWK has put many FAs there, that's how I know, and that's why I added that option in the conflict resolution window). What do I need to know regarding D-League team types, player types, etc? Can you give me some info?
The tool can only choose a player automatically IF they fulfill the following 2 conditions:
1) Same name (Last Name and First Name)
2) Proper IsFA & TeamID1 values (if IsFA == 1 then TeamID1 MUST BE -1, if IsFA == 0 then TeamID1 MUST NOT BE -1, otherwise the player is ignored as faulty).
The tool works in 2 passes. First it's the Player pass, where it looks for Player Information in the From roster to copy over to the To roster. So for each player in the To roster, it looks for matches in the From roster. If just one players fulfills the conditions, he's automatically picked. If there's more than one players, the Conflict Resolution window pops up, and gives you 3 options to automate (as much as possible) which player gets picked.
1) You can select to only be notified if any matching players are in different team than the player you're replacing. For example, "don't bother me while I'm replacing Iggy in the 76ers if there's an Iggy in the same team in the source roster!"
2) You can select to only be given options regarding current players for current teams. For example, "don't tell me there's 5 Iggys in the classic teams, only give me the Iggys in the current teams!"
3) You can select to have Free Agents be replaced with matching players in D-League teams. This feature I pretty much put in because of HAWK's putting some FAs in D-League teams. So, for example, if there's an FA in your To roster that only exists in a D-League team in the From roster, if you select this option, you won't be notified as the candidate will be picked automatically. This option will also pick D-League matches over classic matches as well.
The second pass is the roster pass (if you select Current or All teams), where the tool looks through each team's Roster section in the From roster, finds matching players in the To roster (which it has already edited during the first pass), and copies over any missing players (such as the 2012 rookies or european signings), and also any missing FA. You shouldn't get many notifications during this phase, if any.
EDIT: Note that missing players have ALL THEIR CATEGORIES copied over, if that's not obvious. You don't need to select them all to get missing players in with their full info.Use the tool's automation features, and if you have more questions, feel free to ask.
EDIT: Here's the filter I use to cleanup the roster.
Also, if you want to quickly fix your roster (just the PlCount and duplicate players thing), download v0.3.0.3 of Roster Merge, select UBR in From and your roster in To, DO NOT SELECT ANY PLAYER CATEGORIES, just Current in Teams, select No FA, and then Do It. Check all 3 checkboxes (doesn't matter as the players won't get edited), and then click on Replace. You should be done and have a fixed roster almost instantly. I verified this in my Custom Roster and also my Association.