Ive never seen that myself.. all I can suggest is putting a watch on the variable(right click, select "Add Watch") and place breakpoints at all the places in your program that it's value is passed or changed and, both before and after the change, and check what is happening to it.
Good Luck, that bug looks like a pain in the butt kind..
Edit : How are you manipulating you health value ? are you using pointers ? Im thinking is there any chance that anywhere in your program you could be overwriting memory somewhere, it could explain the random nature, might be overwriting very small amounts, not causing and serious damage, enough to crash, but little glitches like that. Just thinking out loud..
If it ain't broke.... DONT FIX IT !!!