Apparently the radio interference is messing up the IIC bus communication such that the slave doesn't think it is being addressed and there is no ACK. As Steven pointed out, it is bad software design to have a missed ACK cause the processor to reset. This needs to be fixed, but your question is mostly about the interference issue. You got lucky that the interference aggrevated another lurking bug in your code. Fix that while it is easily reproduced.
2 kΩ pullups on the IIC lines is about as low as you can go, so nothing more can be done there. You don't say what frequency and power level this radio is that is next to the board. Some level of closeness and power output is going to cause a failure. Put another way, there are only so many volts per meter your board can take before it operates incorrectly. The first thing you need to ask yourself is if the level of radiation hitting the board is reasonable to protect against. One solution could be "well, don't do that". Put the transmitter accross the room, shield it properly, move the antenna, etc.
If you do need to make the board less sensitive to this RF (again, it would be useful to know the frequency and power level you're dealing with), then there are probably various things to fix. Most likely this problem is due to bad layout, particularly the ground, and inattention to high frequency loop currents. All the same things you do to reduce emissions work symmetrically to reduce the susceptibility to received radiation. Put another way, physics tells us that anything that works as a transmitting antenna works as a receiving antenna and the other way around.
So show the layout, particularly the grounding strategy, of your board. Also look carefully at anything going off board because these are antennas. Since you are using a 18F97J60 which has a ethernet MAC/PHY, you probably have a ethernet cable coming from the board. What RF reduction is on the network side of the transformer? Does the transformer have a built in balun on the network side? Does the problem go away when you unplug the ethernet cable?
Don't use internal pull-ups for I2C. Use external resistors.
In other words, it's a design error when you attempt to use internal pull-ups for I2C (pretty much on any microcontroller).
The datasheet says that internal pull-up current is 50μA min and 400μA max. First, look at the huge variability of the pull-up current. Second, even 400μA is too weak for I2C. Even a 2.5kΩ resistor with Vcc=3.3V would generate a 1.3mA pull-up current.
Related threads:
What happens if I omit the pullup resistors on I2C lines? The O.P. was using internal pull-ups without knowing it. Illuminating oscilloscope plots in that thread.
Is there a correct resistance value for I2C pull-up resistors?
Best Answer
You can use an I2C bus extender which can act as a buffer in between the two devices.
http://www.nxp.com/documents/data_sheet/P82B715.pdf
These devices may have other names as well, like I2C bus "line buffer". They're made by a variety of manufacturers (TI and NXP come to mind). Pick one that fits your needs.