Have you tried debugging with Serial.print's?
Throw out a Serial.print('a') at the start, and b,c,d,e,f,g etc when you enter each function. See where your alphabet stops. (Careful using descriptive strings unless you F() them due to memory constraints). Once you find the function call that is causing the issue, print all the variables inside there. Also, verify that you're not running out of SRAM. More often than not, reboots are from running out of memory.
Also, simplifying your code will help you debug it some more. You've got a lot of "unnecessary" clutter and redundant statements that is making everything look at lot more complicated than it needs to be.
It's very easy to make a mistake when dealing with binary numbers and its tedious counting zeros to verify offsets. Sticking to hex tends to be a little bit more programmer friendly in the long run. It doesn't take too long to remember the bit patterns.
Regardless of coding practices, just start dumping checkpoints to the Serial port until you can see exactly where the issue is. If it's inside the Wire library, add dumps inside there too.
Fair warning: Don't copy and paste the below. I don't know the rest of your program, and made assumptions about variables that may or may not be true. It's merely an example.
For example:
void UniLcdBtnBrd::writeLCDNibble(int data)
{
if (BLightOn)
data = data|0b10000000;
Wire.beginTransmission(pExpAddLCD);//write nibble
Wire.write(data);
Wire.endTransmission();
Wire.beginTransmission(pExpAddLCD);//enable High
if (BLightOn)
Wire.write(data|0b11000000);
else
Wire.write(data|0b01000000);
Wire.endTransmission();
Wire.beginTransmission(pExpAddLCD);//enable Low
if (BLightOn)
Wire.write(0b00011111&data)|0b10000000;
else
Wire.write(0b00011111&data);
Wire.endTransmission();
}
....
Is the same as:
void UniLcdBtnBrd::writeLCDNibble(int data)
{
if (BLightOn)
{
data|=0x80;
}
Wire.beginTransmission(pExpAddLCD);//write nibble
Wire.write(data);
Wire.endTransmission();
Wire.beginTransmission(pExpAddLCD);//enable High
Wire.write(data|0x40);
Wire.endTransmission();
Wire.beginTransmission(pExpAddLCD);//enable Low
Wire.write(0x9F & data)
Wire.endTransmission();
}
...