Statement 1: looks and reads well to me. You could also have used "They say that he may not have done all he could to keep her safe.
Statement 2: I would agree with the comment above that you could drop the "he" in the final clause, as it is implied from the earlier use. In my opinion the use of "did nothing" in the final clause is preferred to "didn't" as I think it is better English, assuming of course that is what you want to say, as it means something a little different: "didn't" suggests that he did not do all he could have done, whereas "did nothing" clearly implies that he did nothing at all.
"Hasn't done" does not work in this context as it is a different tense (I think). If you were to say "There are many things he could do to keep her safe" then it would be appropriate to end the sentence with "but hasn't done." or just "but hasn't."