Hi Sara,
I'm not aware of a way that you can retrospectively populate the status change date into a custom field. Your statement for the first field mentioned in your post will look something like this: (NOTE: Field 1 is the name of the custom field you have added the calculation into, obviously change this to your own name):
IF(Status='DED',IF(ISBLANK(Field 1),$$NOW,Field 1),Field 1)
What this calculation does is looks at the project status and if it is in 'DED' status, it will populate a timestamp of now. It can't look retrospectively at historic status change dates, which is why when you add the field to projects that were set to DED in the past, it will only return todays date.
For the third field mentioned in your post, the below statement would look at field 2 (the standard date field you mentioned) and if it is blank is will return the value from field 1 (the time stamp for DED status), else it will return the value from field 3 (the standard date field)
IF(ISBLANK(Field 2),Field 1,Field 2)
Hope this helps!
Best Regards,
Rich.