I'd stick to grams as long as possible if you can.
Here's what I do for staged injection:
1. Calculate the fuel mass desired into the cylinder total (from air mass * stoich F/A * target phi * warmup enrichment)
2. Calculate the maximum pulse-width possible at the current RPM to maintain 80% duty on the injectors, then convert this into the maximum fuel mass request, this number may be different for each injector because the pressures may be different (in my case, one is after the ITB and one is before)
3. Calculate the desired % to split to the upstream injector, with hysteresis so it will shut off the upstream below certain loads and switch it on again at higher loads
4. Multiply the total fuel request by the split fraction (or zero if not splitting) and run this through the transient enrichment for the *upstream* injector. I use x-tau and have separate x and tau tables for the upstream and downstream. The transient model clips the mass it will request to the maximum fuel mass, and accounts for this limit in the puddle mass. It also calculate the actual mass delivered from the evaporation fuel and the clipped fuel request * (1-x).
5. Subtract the actual mass delivered from the upstream by the mass requested, and use this as the request to the downstream. This is then run through x-tau again, for the downstream injector, to calc correct fueling even with switching on/off splitting. Normally I don't split until the split request is >20% (to avoid nonlinear pulses on the upstream).
6. Convert both masses into working pulse widths, and schedule them in hardware. I told my ECU I have twice as many cylinders, and manually TDC-offset the upstreams to the TDC of their correct cylinder. I use the same injector model for both, so the curves are the same, but the downstream is calculated at manifold pressure and the upstream at throttle inlet pressure.
As for where to apply corrections, it's difficult to say. I have two separate sets of corrections, corrections on target phi, and corrections on evaporation. Target phi corrections multiply or add phi under certain cases (PdlDot-based tip-in torque for example) to add or subtract torque during transients while airflow catches up. Evaporation corrections account for fuel evaporation which does not show up as a change in phi (such as fuel not evaporating because it's cold). The difference is that target phi, after multipliers, should show up on the O2 sensor, while evaporation corrections should not. I also have a third set of corrections, VE corrections which modify airmass, based on O2 feedback, since measured fueling errors are assumed to be airflow errors.