Почему уменьшился размер изображения при перезаписи?
По идее, жмёт его ImageIO.write, больше некому. Судя по всему, контролировать степень cжатия в этом методе нельзя.ImageReader reader = ...; //ImageIO.getImageReaders(ImageIO.createImageInputStream(stream))
reader.setInput(...);
IIOImage image = reader.readAll(0, null); 

RenderedImage renderedImage = image.getRenderedImage();
ImageWriter writer = ImageIO.getImageWriter(reader);
ImageWriteParam param = writer.getDefaultWriteParam();
paran.setCompressionMode(MODE_COPY_FROM_METADATA);  
writer.setOutput(...);
writer.write(null, image, param);
Должно быть примерно как-то так.
Внутри ImageIO использует JPEGImageWriter, видимо, он что-то там пережимает (но это не точно).
Если вы просто хотите прочитать и записать файл, ImageIO вам не нужен.
Используйте тот-же Files из nio:
Files.write(Path.of("C:\\out.jpg"), bytes, WRITE);