2 of 2 addition after the original question was edited

In an online shop shipping physical goods you really need a shipping address, otherwise it's hard to know where to send the goods. In a few cases customers might want to enter a different billing address, but mostly not (make sure by doing some research in the existing customer database if you can). So it's preferred to give the option "[ ] Send invoice to a different address"

So you're right to default to both being the same which makes the form look much easier in the beginning. Those users actively selecting to enter a different address will not be surprised if the form has more fields after they ticked the checkbox. In other words, the default should be a checkbox that is not selected.

The edit of the original question changes this from my point of view and opens up for another solution. How about displaying not displaying a checkbox but a dropdown? Default option in the dropdown is "same address". The other options are the other addresses that are stored in the system and would display the corresponding address if selected. The last option in the dropdown is "new billing address" which would reveal the form to enter a new address.


download bmml source – Wireframes created with Balsamiq Mockups