Is something wrong with my LCD screen?

These first two are red herrings, they won't help or hurt:

The display is 20X4 instead of 16X2. I've tried adjusting the lcd.begin statement to account for that but I get the same results.

You get the same results because the current LiquidCrystal library only checks the second value, and it only checks to see if that value is '1' or greater than '1'.

I tried it with and without the setCursor call, same behavior.

You do not have to set the cursor. It is set to 0,0 when the LCD is initialized.

try taking away the counter and just have the word hello world displayed.

This is not a bad idea. Having changing data in an initial program is a poor choice when it comes to troubleshooting.

For a moment I thought my LCD might not be broken, but that's what it's looking like to me.

I doubt that it is broken.

Your contrast may be set too high. If you have a voltmeter you should find that the voltage at pin 3 is less than 1 volt when the display is correct.

You have used way too much solder - check both sides of the board for solder bridges between LCD pins. Also, the connections to several of the pins on the LCD module don't look too good, especially 4, 5, and 11.

Don