You have a very complex system of progmem character arrays, the string table (also in progmem) and copying to a buffer. Why don't you just use the F() macro and leave the strings where they are used:
This way the character array stays in the progmem but is directly in the code where you use it and you don't have to copy it to a temporary buffer (saves some RAM additionally).
The biggest win you get is readability of your program.
I get this compiler error every time:
Greenhouse123:237: error: invalid conversion from 'const __FlashStringHelper*' to 'int'
Greenhouse123:237: error: initializing argument 1 of 'void ETHER_28J60::print(int)'
Do you really need to set the style for every button?
Good point! A simple button would make shorter strings. I'll fix it.
I get this compiler error every time:
Greenhouse123:237: error: invalid conversion from 'const __FlashStringHelper*' to 'int'
Greenhouse123:237: error: initializing argument 1 of 'void ETHER_28J60::print(int)'
Unfortunately, class ETHER_28J60 does not inherit from class Print, which means that it can't directly print F() strings.