Going through some very early PIC code, I came across a really ugly fix I made and have been quietly using since. There was some flakiness writing output port bits individually, and so I just buffered the entire word in RAM and wrote the entire PORT each time. It sucks, but got the job done. Undoing the hack just now, writing a single bit, say RC0 = 1, resets the other pins. WTF? The compiler is HiTech's PICCLITE, although I don't think it matters. The disasssembly shows the expected "BSF 0x7, 0". Having pulled a bit of hair and lost a bit of sleep over this, I just stuck that little "gem" of hack into everything I did since. Now it's time to get rid of it.
My expectation is that writing an output port should be routinely possible, and unusual "side-effects" such as I saw would be show stoppers. Anyway, I don't know where the fault is. It could be the compiler's IRQ state pushing, but that doesn't make sense. I could write the simplest test program on earth to set a few bits, but thought I would start by asking here. (Actually, this isn't the beginning. The beginning caused me to lose a fistful of hair and some sleep.)