Here is (a simlified version of) what is going on:
When adding an input to the form, it "registers" itself as a form's control (which means it is taken into account when determining the form's validity).
Additionally, it becomes available under formsName.inputsName.
(Note, (2) is totally independent from (1), meaning that a control will still play a role in form's validity even if not accessible under formsName.inputsName.)
As a result of the above (and the fact that all inputs have the same name), only the last added input will be available under formsName.inputsName, but all inputs will be taken into account when determining the form's validity.
Now, when the last input is removed, formsName.inputsName is "unset", thus formsName.inputsName.$valid/$invalid will always evaluate to a falsy value.
Summing up:
formsName.$valid/$invalid will always be accurate and reflect the actual validity state of the form (based on the currently present inputs).
formsName.inputsName.$valid/$invalid will either refer to the last input's validity state or be undefined (depending on which action was most recenty performed: adding an input vs removing an input).
BTW, it is always a good idea to use formsName.$error and/or formsName.inputsName.$error when debugging forms, since they are more informative than $valid/$invalid.
Optionally, combine with <pre> and the json filter for premium form-debugging experience ;)
E.g.: <pre>form.$error: {{ form.$error | json }}</pre>