We would have to see the full code but usually this happens because some variable isn't initialized. A hardware reset and a watchdog reset are not identical, you should refer to the data sheet to see the state of registers after each occurs.
I second the call to see all of the code (or, preferably, a short but complete code example that demonstrates the problem).
What device?
Can you explain how you are determining where the code starts after a WDT reset?
As the code is 'C', I'm certain that there will be code executed as part of the C runtime that sets things up before the 'main' is called. Are you setting a breakpoint in this startup code or just somewhere in your own code?
Susan
PIC and other 8-bit microcontrollers doesn't support core fault vectors, in case of any troubles with pointers they just getting crazy. That's why learning with arms or linux is better for begginers. You can at least understand where you doing something wrong and stop guessing.