I'd been thinking about putting together something like this, and my first thought was different from what's been proposed here:
1. Add a dummy, non-playable Black Soul Gem to the PC's inventory.
2. Have a script attached to only that dummy soul gem continuously checking its soul level.
3. When a soul gets trapped in the BSG, add a new filled soul gem of the appropriate level to the PC's inventory and remove one unfilled gem of the same level. Replace the BSG with an unfilled version.
I haven't looked into all of the details, so this may not be feasible with an inventory item. Perhaps it would work if the BSG were removed to another container, dropped, and then operated upon?
This is actually very close to the solution I had in mind, so I of course think your idea was very smart

A few problem points though: By using a Black SoulGem, you will get the "Soulgem captured..." message even if you detect that the soul is too large to fit in any of the player's soulgems, but that's no big problem.
Another problem is that even if the script runs every frame, the soulgem isn't really filled until a second or so after the capture (some slowdown in the engine), which means that if the player kills two creatures within that timeframe, the second will go into one of the normal soulgems if available.
A third is that soulgems cannot be set to non-playable (thus invisible), so to get it to work perfectly, you must remove it just before the player's inventory is opened, and add it when gamemode starts again. Since you are only removing an item when the player inventory opens, it
may be that it works even after the inventory has been opened though.
A fourth is that if you capture a petty soul while having a greater soulgems in your inventory, the greater and not the black dummy will get filled, as the smallest is used first. This can be overcome by not only adding a black dummy, but one dummy of each capacity. Then, either a normal, matching soulgem gets exactly filled (and you don't need to do anything), or one of yours get filled.
Finally, the question is what you intend to do when your script on the dummy soulgem detects that it is filled. If you only intend to "move" it directly to the best match, you're not doing anything my mod is not already doing, but if you're going to keep count and need, say 5 petty to fill up a larger soulgem, then there's no soulgem to fill yet, but you must instead store the capture in a variable that counts up, but then you must consider how to display this to the player, and what's happening if the player sells/drops/uses this half-filled soulgem.
So as you see, while I think you're on to it, there are some issues. For the record, The first version of my EE soulgem feature did something like that, switching dummy soulgems in and out depending on what other soulgems the player had, and whether he was in gamemode or in an inventory menu - so I have much of the groundwork ready. So if you really want to do it, I could look up the old version.
Anyway, I think I have explained why I just didn't go ahead and implement my idea right away