Even if a pair of $2005 or $2006 writes got interrupted by an NMI (which assumes that your MAIN code (outside of nmi) has writes to them, and thus, you had to read $2002 to fix it so your nmi code could execute its pair of writes correctly, how would you even go about restoring the state of the latch, when you exit nmi? It seems like if you're trying to squeeze every bit of performance out of the cpu, it'd be better to not even have to deal with it in the first place.
In the end, if you have *good* management in your code, you shouldn't even need to read $2002 at all, ever. (Maybe once in the reset routine, but that's it)
but in all honesty, when are you ever going to need to write to $2005 or $2006 outside of the NMI while the game is running? Only when the screen is turned off, yes, but when the screen is turned off, theoretically, your ppu-writing pipeline manager thingy (the method you theoretically are using to buffer your ppu writes so that they are written during the next vblank) should also be turned off, which means that the nmi wouldn't be messing with 2005/2006 while the main code is, so there's really no time where a pair of 2005/2006 writes would get interrupted.
Ok, maybe you change 2005/2006 during a scanline interrupt, but even then, do these scanline irqs ever fire in such a way that an nmi would interrupt them? Usually not, unless your code isn't structured well. And since you're 99% likely not messing with 2005/2006 in your main code while the screen rendering is turned on (as I explained above), it just seems that these write pairs would never be interrupted. Everything is just naturally organized such that it never happens.
Thus, I'd think you're safe not reading $2002 in your nmi.