Are you swapping into a file? Check the fragmentation in the filesystem.
At boot time there are no drivers or filesystems available so the kernel just streams the data back into ram. Therefore, at hibernation time it needs to just stream the data into the swapfile. If the file is fragmented, only the first fragment can be used.
Check the fragmentation with e4defrag -c /swapfile.
Fix it with
swapoff ...; e4defrag -v /; swapon ...
- Alternatively, create a new file, then defragment before running mkswap.
Why do you defragment the whole root filesystem if only one file needs to be defragmented? well, other files could be defragmented enough but cluttered over the disk such that there is just no big enough area for the swapfile to shrink to one extent.