I didn't say the new roof was needed as the result of some sort of insurable damage.  Rather, you and only you are on the hook for the repair, the decision to higher that particular contractor and whether or not he gets paid.

To answer your question, I would fire the guy after it became clear he was incompetent.  Then I would sue him in small claims court or civil court to recoup what I already paid him and then find a new contractor to remove his work and either start again or return it to the way it was depending on the status of the work when I fired him.  I wold not continue sinking money down the rat hole of the original contractor.