AFAIK, "Switch between tasks every..." is a minimum setting and is also reevaluated at the end of a task.
I have set it to 120 minutes, because of the long initialisation period of Einstein tasks (several minutes), and my resource share is 40 for SETI and 60 for Einstein. So, the SETI tasks get pretty much exactly two hours, whereas the Einstein tasks hover around four hours, depending on calculated short time debt I suppose.
Computer sind nicht alles im Leben. (Kleiner Scherz)
SETI@home classic workunits 3,758
SETI@home classic CPU time 66,520 hours
Which task gets run next is either the task with the highest debt (bad terminology, but we are kind of stuck with it) or the task with the nearest deadline from the set of tasks that are determined to have deadline trouble (never mind exactly how for this discussion).
The change in debt is calculated based on the resource share. The lower the resource share, the slower the debt increases when not crunching, and the faster it decreases when crunching. Note that there are two debts. Long term debt is used to determine which project to request work from, and short term debt drives the decisions of which task gets the CPU next.
There are several triggers for calculating which, if any tasks are in deadline trouble. These include, but are not limited to: A successful work request. A completed file download. A task completion. The end of a period of "switch tasks every X minutes" without any other triggers intervening.
A task will be switched out and a new task run whenever a task with a shorter deadline needs the CPU because of deadline trouble, OR it has reached the checkpoint after "Switch tasks every X minutes" and there is some task from a project with a higher short term debt.
Tasks may or may not switch every interval, but they will be checked at least that frequently to see if they should switch.