You should, instead, add a sub-process around the whole process you have now. Add the timer-boundary-event on the boundary of this subprocess, having cancelActivity=true. When the timer fires, all active tasks in the subprocess will be cancelled, resulting in only one active path of execution in your process, being the outgoing path from the timer-event.
The reason why your process doesn't work is because the process can only finish when all parallel paths are finished. If you fork the execution into 2 paths: 1) Regular tasks and 2) timer, both regular tasks should be completed as well as the timer…