1) You can A_JumpIfInventory("MagazineAmmoType",1,...) and do different reloading sequences depending on that - one for empty magazine, one for not empty. You can look into Complex Doom, it has several weapons that work this way. I'm sure other mods also do.
2) This one's harder. Ammo pickups can contain a specific ammo amount, but they either have to be dropped by a monster, or you might need to make a different ammo drop for each amount (and check case-by-case when you're reloading). This may be easier with ACS, but I can't help there.