I'm tempted to junk the display and try another, but before I do that can anyone offer any suggestions as to what might be wrong?
You have not entered the pin mappings into the constructor.
When you don't do this, the code defaults to using the pin mapping for fm's LCD extra i/o board.
My guess is that the wiring for your board is not the same as fm's board.
This is highly likely as I've not seen any other board out there use the
same mapping/wiring as fm's board.
Because if this, I do not recommend ever depending on default pin mapping
and highly encourage everyone to always use the full constructor which
includes mappings for all the io expender output pins as well as the backlight io pin
and its polarity.
Do not be so quick to blame the hardware.
If you enter your full pin mapping including the backlight pin and polarity into the constructor
it will likely work.
Here are two of the many threads out there for i2c backpacks.
(Seems to be a popular subject these days)
While it may not use the same pin wiring as yours, you can get
a good idea of what do from these threads:http://forum.arduino.cc/index.php?topic=174860.0http://forum.arduino.cc/index.php?topic=158312.0
Take note of the examples on Terry's site and use the full constructor
which includes the backlight configuration rather than using the deprecated
If you are unable to figure out the wiring of the board you have you can also try the
"guesser" sketch that I supplied in the threads.