For your first question, it is currently not possible to create/run the endpoint again if it returns an error response when creating deal.
My current hypothesis in which you're seeing the timeline events created despite getting a 500 error initially is because there might be a retry mechanism for 500 errors. However, do note that the retry logic isn't set up by HubSpot.
As such, could you check in with the team to see if they implemented a retry logic for 500 errors? The reason is because, it is common for system to retry 500 errors as typically 500 errors means an intermittent error which most of the time gets resolve upon retries.
Thank you for sharing such a clear use case and concerns!
On my end, I intentionally tried creating deal with 400 errors and I wasn't able to see it getting created after receiving a success 200 response.
As such, I'm sure that we wouldn't create a deal if it has previously returned as an error. Going forward, if you're seeing this behavior, please do not hesitate to reach back out and provide us with logs of previous requests.