Entity wrapper save using db_transaction()?
I finally found an explanation of what happens in this case in the Transactions documentation.

While we cannot declare functions &quot;transactional&quot; in PHP, we can emulate Java's nesting logic by using objects with constructors and destructors. A function simply calls &quot;$transaction = db_transaction();&quot; as its first (or nearly first) operation to make itself transactional. If one transactional function calls another, our transaction abstraction layer nests them by performing no transactional operations (as far as the database sees) within the inner nesting layers.
To start a new transaction, simply call $transaction = db_transaction(); in your own code. The transaction will remain open for as long as the variable $transaction remains in scope. When $transaction is destroyed, the transaction will be committed. If your transaction is nested inside of another then Drupal will track each transaction and only commit the outer-most transaction when the last transaction object goes out out of scope, that is, all relevant queries completed successfully.