That is called Read-Modify-Write or RMW for short. It was my first thought when I read the thread earlier but since a PAUSE between the two statements did't help it sounded less likely - not that I know what else it would be.....

On a PIC ALL "bit flipping" are performed as a Read-Modify-Write operation - it's how the hardware works internally.
So, when you do PortB.0 = 1 the PortB register is read to a working register in the PIC (Read), bit 0 is set (Modify), the working register is written back to PortB (Write). This has nothing to do with PBP it's how the hardware works and it's basically what's happening during the 4 internal cycles of the oscillator which makes up for a full instruction cycle.

Now lets look at what CAN happen with something like
Code:
PortB.0 = 1
PortB.1 = 0
The first operation, by it's own, works as expected. But when the second line was added the first one stopped working. What's happening is that whatever is connected to PortB.0 prevents the voltage at the pin to rise quick enough so by the time the second operation performs the Read-part of the RMW PortB.0 is still at a logig LOW level so that's what is being read. When the Write-part of the RMW is performed a logic LOW will then be written to PortB.0.

Inserting a PAUSE between the two lines allows the voltage to rise to level where the second operation works properly.

If the device in question has LAT-register then using those instead totaly circumvents the issue. TOGGLE however won't work on LAT as far as I know.

Now, TOGGLE pwr_lowled is a high level commad, it takes longer time to execute than pwr_led = 0 which would explain why it matters in which order you put them. But again, a PAUSE in between the two instruction should have "fixed" it - which it supposedly didn't.

Make sure you're not trying to pull more current thru the pin that it's rated for. Always use current limiting resistors when driving leds - always. Not doing it CAN work but it's just BAD practice - really bad practice.

/Henrik.