
I've been messing around with it, and I believe there are three viable solutions.
1. Change all created players to originalPreviously, I'd just been changing created players to original players in batches, as I added their extra data and assigned them faces. However, skipping ahead and changing them all to original players actually resets the CAP limit completely, allowing you to add more players as if you haven't added any to the roster previously. This is probably the most straightforward solution. The players you change will still use their CAP faces until you assign them an art file, you just won't be able to edit a few details in their bio (such as name and college) anymore. That isn't really a problem, so this might be the way to go.
However, a potential drawback here is that there is a finite space for data in the rosters, so once you start adding a lot more players, it may cause problems (or you'll just run out of available player slots after another 50 or so). I've tested it adding just a couple more players though, and there were no problems in Association or anything. More testing may need to be done to confirm everything will be OK, but for now, it looks like it might be a viable solution.
2. Copy players from another rosterThis one's straightforward: create a player in a new roster where you haven't hit the CAP limit, and then copy their data to the next free slot in the original roster. Change the PortID to the next one in sequence (at least, that's what I did), and to make sure there's no conflicts, have them in the Free Agents so they can be signed as necessary. If the players you add are flagged as created, they'll also show up in the CAP list. Works fine in Association, though again, file size/data limit may be an issue once you start adding a lot of players. As I said, it'll require some additional testing.
Arguably, this method is potentially slower as there's the extra step of copying between rosters, though that doesn't take a long time to achieve. It may also be easy to accidentally overwrite something you don't want to, or encounter some issues copying data between files. One potential advantage is that you can see how many slots you've got left. If nothing else, it's an effective method of moving and copying players between rosters, which is obviously useful for special projects where you may want to borrow data from another roster, or duplicate a player.
3. Change an original player to created, overwrite themSimple as changing an original player's type to created, at which point they show up on the CAP list and all their data is accessible. Note that they'll still have their cyberface, but they can obviously be assigned a new one when you're ready. This way, you can easily just overwrite existing players, changing their names and data, then assign them a new face ID matching the art file you're using. Once you're done, they can go back to being flagged as an original player.
The drawback here is leftover data such as career stats, but I'm guessing there's probably a way to wipe that data. The advantage is that you're not adding any further players over the CAP limit, so it may avoid issues with the data limit. It's probably the safest method, and reasonably straightforward. The first two methods are perhaps easier in that you don't have to go hunting through the database for newer players (they're all together with their fellow CAPs), and you also don't have to lose any original players.
Of course, you could also conceivably overwrite the players from the developer teams if you wanted to keep the original NBA players for any reason; I'm guessing they don't have any career stats so they're probably ideal, and they're all together in the database as well, so they're easy to find. It's going to interfere with the codes that unlock the developer teams, but there's likely going to be more interest in playing with the project you've created as is, than also bringing the devs into the mix. In any case, just something to keep in mind.
So, the best method is...At this stage I'm not 100% sure, but I'm leaning heavily towards #3 as it means you're less likely to run out of CAP slots and hit the data limit. It isn't as neat, keeping all the new players together, but it's potentially a lot safer. You could start with players who don't have any career stats, to avoid having incorrect data there.
Method #1 is also something you're likely going to end up doing anyway so that the new players are recognised as original, so even if you go with Method #3 and don't use Method #1 to add any new players, you might want to do it first so that only the original players that you've now flagged as created show up in the CAP list, making them easier to track and work with while you're overwriting them. In other words, you're probably going to use Method #1 at some point, even if it's not to bypass the CAP limit.
The other thing that you may have to keep in mind is future updates. If you need to add a bunch of new players for whatever reason - say, a new batch of rookies in an ongoing current roster update - you'll want to future-proof your rosters by allowing some method of adding those players. With that in mind, Method #3 is probably the safest, since you'll have plenty of players to overwrite and potentially some extra CAP slots you can free up by combining it with Method #1.
Potentially a bit confusing, not quite as easy as working with NBA Live's databases, but we do have some options that are all reasonably easy to work with once you've tried them out and have the hang of them. Just be sure to keep backups, and test regularly!