That’s the correct behavior. SETCODE does not create a new account. This is disambiguated by EIP-6780:
A contract is considered created at the beginning of a create transaction or when a CREATE series operation begins execution (CREATE, CREATE2, and other operations that deploy contracts in the future). If a balance exists at the contract’s new address it is still considered to be a contract creation.
You’re right, this is just very confusing. Likely a result of spec thrashing. This should only apply to code executing instructions. I will update the EIP so it is clear.