I've debugged a little more and actually it's not only enough to do a swapoff -a, but you need also a cryptsetup close /dev/mapper/swap0 (sorry for forgetting it initiallly). The shutdown hangs in the do_close() of /lib/cryptsetup/cryptdisks.functions (line 556), where cryptsetup remove is call. Adding a -v --debug gives:
[..] # Initialising device-mapper backend library. # dm table swap0 OFW [16384[ (*1) # Trying to open and read device /dev/sda5. # Deactivating volume swap0. # dm status swap0 OF [16384] (*1) # Udev cookie 0xd4d9dac (semid 65536) created # Udev cookie 0xd4d9dac (semid 65536) incremented to 1 # Udev cookie 0xd4d9dac (semid 65536) incremented to 2 # Udev cookie 0xd4d9dac (semid 65536) assigned to REMOVE task(2) with flags (0x0) # dm remove swap0 OF [16384] (*1) # swap0: Stacking NODE_DEL [verify_udev] # Udev cookie 0xd4d9dac (semid 65536) decrementing to 1 # Udev cookie 0xd4d9dac (semid 65536) waiting for zero
signature.asc
Description: Digital signature