This is caused by the model.countryId not being defined on first page load, which means the options defaults to an empty array. Once the address is saved, the selected country that is saved will provide the countryId and therefore your states dropdown is populated the second time around.
IIRC, the sample Commerce templates hide the text field and show the ...
After further testing and debugging, it turns out these issues are related to this bug in Commerce:
As per that github issue, it was a Discount with Ignore sales when this discount is applied enabled that was the culprit, but shouldn't be once that bug is fixed.