Adding a callback for processing the UART data seems to cause issues with I2C interrupts
The callback runs in the context of UART interrupt.

Therefore it blocks further UART interrupts, and all other lower priority interrupts, until the callback returns so the UART interrupt exits and normal program flow and other interrupts can continue. You can't even receive and buffer further UART characters for the next line during a lengthy operation.

This is exactly the thing almost all embedded programming tutorials warn about, do not do anything in an interrupt you don't have to do, especially don't do lengthy and complex operations, like UART parsing or executing arbitrary operations from there.