I believe things are different for an 'SKDownload' situation.
If you are not using SKDownload then you can finish the transaction whenever you want and monitor how the download is going yourself.
But if you are using SKDownload you cannot finish the transaction until the download is complete. If something happens to interrupt the SKDownload you can restart the process simply by adding a transaction observer. Once added, the transaction will cause a call to updatedTransactions with state 'purchased' just like before and you can restart the download process as you wish with the new transaction object.