One diff is the focus: Quartz is focussed on parsing cron expressions. For us, jobs are always relative to a process execution.
But the main reason for doing it ourselves is that we want our job executor to work on different environments. That is a lot easier for us to do when we have full control. I remember when I tried Quartz before that we couldn't give it a JDBC connection without hacking the core impl classes. Our own job executor works with our command executor interceptor chain. That is the core Activiti strategy of supporting multiple environments like standalone JDBC, Spring, JTA, ..