I'm not sure if I'm missing something here, as the query seems pretty straightforward. You don't, however, include details about how the tables link to each other, so I'll...
The problem here is that the ROLLBACK statement rolls back all the outstanding transactions. You can see this if you output @@TRANCOUNT in your sps. eg: