I have something similar, but my clean-up occurs before TestExecute (or TestComplete) is run. I use a PowerShell script to perform the necessary clean-up operation, followed by running the automation, then emailing results. I found using TestComplete General Events not working the way I wanted it to work and this caused a number of issues.
If an error had occurred while running, I can diagnose and see at what state it had stopped. Whether it's relating to the AUT or scripting, I can easily see the result. Whereas, if I had performed a clean-up operation after an error occurred, then it would have been tricky to diagnose!