As I see it, some of your choices are not the most straightforward ones. What was your argumentation for choosing this implementation?
Why you are using separate 'dummy' tasks to select the type of update to run (full or daily)?
Would a package 'Global Variable' not be a simpler alternative? In a script task you set the variable to the correct value and returns success / failure depending on the type. Using the workflow, you start the appropriate tasks on success / on failure. (You could even build a cascaded check, to have more control over real error handling.)
Why did you build a separate table with start and end times of the job?
For reporting a real failure, I would just use the 'Send Mail' task on failure. If you build more than one task, you could even include the type of failure in your mail.
Of course, that table can be used as a kind of history on the job for reporting.