Arduino freezes on lcd.begin()

I am using standard I2C adapter . . .

There is no such thing as a standard I2C adapter.

. . . it was 0x3F instead of standard 0x20/0x27.

0x38/0x3F is just as standard as 0x20/0x27. It all depends on which chip the manufacturer happened to use in that 'standard' I2C adapter on that particular production run.

. . . LCD is responding, backlight works and 1st row is full, just as it is supposed to do with no data.

Actually the LCD is not responding. The backlight has nothing whatsoever to do with the LCD and your program has not progressed to the point where you turn it on. The single row of blocks indicates that the LCD controller has not been properly initialized so you probably are not even communicating with it. Where did you come up with the numbers for the constructor?

Does your standalone board include the required bypass capacitors for the ATMega328p-pu power pins?

Don