ZeppelinOS implements upgradeability of smart contracts through the use of a proxy and unstructured storage.
If the contract holds some ether, what happens with that ether after it is upgraded?
ZeppelinOS' unstructured storage, like most proxy patterns, works by presenting a front-end contract (the proxy) with its logic delegated to an implementation contract.
This way, the balance (eth) and storage stays in the proxy even if its implementation changes. This is useful for many reasons, one being able to upgrade a production contract for bug-fixing without losing its balance or internal state.