Acredito que encontrei uma solução parcial aqui . Se eu digitar o comando:
sudo sync && sudo sysctl -w vm.drop_caches=3
Antes de tentar hibernar, eu não tenho mais problemas e hibrava a primeira vez, todas as vezes. Isso parece esvaziar o cache, deixando bastante memória (RAM) livre para criar a imagem.
Eu não sou programador, mas parece ilógico que o Ubuntu não faça isso antes da hibernação, afinal? Obviamente, faz algo semelhante, uma vez que tentativas de hibernação repetidas têm o mesmo resultado, mas claramente não o fazem antes de tentarem hibernar. Certamente, é ineficiente quando hibernando escrever também todos os buffers e cache no disco, já que eles também terão que ser recarregados no reinício, mesmo que eles não sejam mais necessários. Certamente seria mais eficiente se o Ubuntu despejasse o cache, ou pelo menos partes que não foram usadas por algum tempo, antes da hibernação?
O fato de não fazer isso é provavelmente a razão pela qual é recomendado ter o dobro do tamanho da RAM para o espaço de swap; terrivelmente ineficiente, especialmente nos dias de SSDs, onde se você tem 16GB de RAM, você perderia 32GB (potencialmente metade do seu espaço HD) de espaço para um arquivo de troca que só é usado para hibernar.
Com os tamanhos cada vez maiores de RAM, eu diria que esta é uma área que precisa ser analisada. O espaço HD pode ser barato, mas isso não é desculpa para desperdiçá-lo devido a ineficiências.