First of all, it would be good if you could give me more details about your timeout error.
Sometimes CATCH blocks are bypassed (KILL command and timeout). In order to make sure that the entire transaction is terminated and rolled back, you need to add this line in your stored procedure:
SET XACT_ABORT ON
Please take a look at the following link:
Also, you may consider changing some timeout settings...