ok, this just got really weird:
I decided to make my own flash programmer using NIOS II, but without the HAL routines (just using IORD/WR_DIRECT). Since I have a x16 chip in x8 mode, I use the Write buffer command to write 16 bytes.. very simple. I wrote them starting at address 0x0, which is the reset address... if I write 16 bytes with NO 0xFFs, and reset the board, I can see the processor reading all 16 bytes correctly. However, if I program an 0xFF at byte location 3 for example, upon reset, all the other bytes EXCEPT 0x3 read correctly! This makes no sense! I'm erasing the sector before programming... but for some reason, when it gets to the address location that I tried to program an 0xFF in, the data lines just go crazy. It reads all the other bytes with no errors.
To get around this, I tried filtering out 0xFFs in code.. if I see an 0xff, I simply don't write to that location.. that doesn't work either. If I erase the whole chip, I can see 0xFFs being read fine.. but as soon as I program something around a 0xFF without touching it, it gets garbled up.