I honestly think that Timeout Until and Wait Until are the same thing. Yours would look similar to the above, but instead of Timeout, yours will say Wait. And instead of "2 days before xxxx", yours will be "Wait until Today'sDate >= StimatedDate"
Let's simplify it a bit:
First of all, I'm assuming you have a field called Today (or something) that will store and update the current date. I'm also assuming that you have some sort of Process (whether it's a workflow, BPF, or plugin) that triggers every 24 hours to update the Today field.
Secondly, I was assuming that you want to send the email 1 day BEFORE the StimatedDate. I'm going to disregard that assumption for simplicity though, and will now assume that when Today is equal to the StimatedDate, you want to send the email.
So, you have your Today field, and you have your StimatedDate field. Let's say you set up your workflow as follows:
Add Step: Check Condition
If StimatedDate Does Not Contain Data OR
If Today < StimatedDate THEN
Stop Workflow with a status of Cancelled
Add Step: Conditional Branch
Otherwise, if Today >= StimatedDate THEN
Send Email
Stop Workflow with a status of Succeeded
Set the Scope to whatever works best for your environment (probably something other than "User").
Uncheck the box by Start when: Record is created.
Check the box by Start when: Record fields change.
Click Select to choose which fields changing will trigger this workflow.
Select your Today field, and the StimatedDate field.
Now, anytime either one of those fields change, whether it's a User changing StimatedDate, or your process changing the date in the Today field, this workflow will trigger, check the above conditions, and stop (either Cancelled, or Succeeded).
I really hope this gets you where you want to be.