I had a similar problem. This comes from the bad blocks on your nand but it seems that you are knowing this.
I fixed the issue by changing the boot args to
nand read.jffs2...
This should take the bad blocks into account while reading. What you cannot avoid is that blocks become bad during normal operation so you realy lose information in your nand and than nothing else will help than reflashing your uboot/kernel.
Markus