Performing signing in the inner loop has terrible performance when many passes through are needed to complete the selection.
Signing before the algorithm is complete also gets in the way of correctly setting the fee (e.g. preventing over-payment when the fee required goes down on the final selection.)
Use of the dummy might overpay on the signatures by a couple bytes in uncommon cases where the signatures’ DER encoding is smaller than the dummy: Who cares? (Probability ~= 1/256^(bytes/2.))