The deadlocks can still happen if two or more people access the same assessment at almost the same time (the double-click probably could have caused it if nobody else is accessing). I traced the deadlock to as::item_data::new which gets called for each question displayed in the assessment.
It easily deadlocked when I ran procs that called it concurrently and in a loop. I also saw deadlocks from as::session::new and as::session_data::new but less frequently.
At first we thought this was caused by nested transactions but I ran the procs without the transactions and they still deadlocked.
Dave suggested that it could be a problem with insert to view and that we try to replicate the problem with much simpler code to find out if the problem is with the CR itself. I'm going to try that later.