Finally figured out why a partition wasn't unmounting, despite supposedly not being used by anything. A bit of deeper digging revealed it was in use by jbd2, which is the kernel. Turns out there was a loop device that was set up but not mounted. losetup -d fixed it.