Uno R3 + 20x4 I2C LCD - screen freezes / garbage

Unrelated to the issue but as a FYI you can put the
output latch bit # and polarity for the backlight in the constructor. i.e.:

LiquidCrystal_I2C  lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin, BACKLIGHT_PIN, NEGATIVE);

Then you can eliminate the setBackLightPin() call and by default the library will attempt
to turn on the backlight when lcd.begin() is called.

With respect to the actual issue:
One other thing to consider is the LCD backpack h/w design. I have seen a few of these
that attempt to drive the LED backlight directly from the PCF8574 output pin.
While it "appears" to work. It is very much pushing the output pin and chip way beyond its rated value.

I've also seen some designs that use a transistor but the bad design creates a short across the PCF8574 output pin
that drives it when the output pin is set to turn lcd backlight on.
This also is pushing the pin and chip beyond its rated value.

Do you have a schematic for the i2c backpack that you have?

Even if you don't, the circuit is simple enough that it is usually possible to figure out
the backlight wiring by close examination of the board.

--- bill