Timers are all stored in the ACT_RU_JOB table, to ensure no jobs are lost when the JVM goes down, for example. Any job-executor in any engine can lock/aquire a job from that table and start executing it.
So if you have 4 different apps running against the same database, jobs for app A could be execute on B, C or D's engine and visa-versa. Having this architecture is bound to get you in trouble (not only job-related). Any specific need to have all data in the same tables? If you want to have it all in the same schema/database, you can always use a table name prefix for each of the apps (eg. job table will be APP1_ACT_RU_JOB for app 1).
The prefix can be configured in the processEngineConfiguration, but table creation needs to be done manually, as the db-scripts we have contain the non-prefixed version. It's a matter of doing a search/replace on all the db-create-scripts…