Great breakdown. I had done it a little differently, and I think gauss rifles give some flexibility here, and 1 liter per magazine is probably excessive, especially in bulk. (.4 kg / gauss mag; they don't float so .4 l is likely generous; most will not be recovered, but only a few need to be to reload/recharge with needles).
Here's the spreadsheet I did, which does mass and cost as well:
http://www.travellerrpg.com/CotI/Discuss/showthread.php?p=508944#post508944
Essentially, 2 dtons does a 150 man light infantry company for about a month of medium intensity combat. That is with medium AT missiles for the only support weapons (NOT realistic!), but it is good for back-of-the-envelope figuring.
Well, assuming cylinders for individual rounds, rather than half-cones, we get (4-pi)/4 of the volume used. But needles are likely 50% cone, 50% cylinder...
so (4-pi)+(4-0.333pi)/8 of the unit volume. assuming single stack (as most, about 60%, detachable magazines are), you get about 47% empty space.
Now, double stacks effectively shave the corners. About 30% of the volume is empty. And we know that most ferrous metals run SG 8.
But then you have the spring compressed volume which is 90% empty, the packing losses (around 10% to 30%) to allow for easy removal from crates (a serious issue in supply). In fact, you want to be able to get the first one out without a tool... except for the key to lock the case... in case of emergency issue.
And then the latch mechanisms and the protective deadspace inside the magazine. (which protects against minor dings causing damage to the rounds and/or jams within the mag. A buddy had a jennings 22 - the spare mag got very slightly bent, and wouldn't feed the last half of the mag. Cheap, single wall, no protective deadspace - not a useful combat magazine.)
But as for that 1L per magazine, I was thinking the 30 rd M16 - actual volume is a little under, but they don't stack neatly so the packing volume is higher. The 20 rds, however, are about 3/L, and I wasn't thinking that hard on it. Still, highballing the required volume gives a useful floor number.