Task Scheduler for small interval and one number of start
Good work. A few comments and questions.


In SchduleJob class, I think that DateTrigger and TaskId need to be defined as internal and the SchduleManager only need to set them. If they will be public, the concrete class may set them to some value and the manager will override it in the Schedule method.
I think you need to constraint the TaskId to be unique and the manager only set it with a unique validation. For user define name\id you the TaskName property.
According to section 2, in the Remove method, replace RemoveAll by Remove.
Consider to change the type to long\int instead string, I don't talk about performance but about meaning although string is also make sense.
If you prefer to use string for the id, use string.CompareOrdinal() for the comprasion.
I think all the logging (add, remove, start, stop, error) need to be in the manager. The ScheduleJob need to be dedicated to the job. It can handle exception if you want, but the manager need to log it also.
Make the ScheduleManager IDisposable is dangerhere. Its a singleton and no body going to use it with using statement, but if somebody will do it, it make a problem because your timer will be disposable...