Потому что в файле:
modules/system/image.gd.inc
гвоздями прибито:
$success = $function($image->resource, $destination, variable_get('image_jpeg_quality', 75));
75 Карл!
Если написать так:
$success = imagewebp($image->resource, $destination, 10);
Он будет конвертить в указанное качество: 10% в данном примере. (imagewebp использовал для простоты понимания - что я нашёл проблему)
В функции image_gd_save
Осталось научить пробрасывать качество в этот аргумент.
Расследование заняло 3 часа..
Про imagewep есть патчи:
https://www.drupal.org/project/imagecache_actions/issues/2982694#comment-13035990