I've never had any problems with using nanoTime() instead of currentTimeMillis(). I've only tried it on Windows machines, but other posts that I've read that mention it are from people running Linux machines. I can't remember anything about it's MacOS implementation.
It is necessary to check that the time hasn't gone backwards (which it does when the counter wraps... the documentation is a bit misleading there -- it wraps quicker than the documentation implies). But your code already does this for the currentTimeMillis() version anyway. The only other point is that of course the value returned is in nanoseconds not milliseconds.
Oh, one other thing... there seems to be a minor problem with it on multi-core AMD processors. nanoTime is based off the cpu's high resolution timer, and on the multi-core AMD processor each core has it own timer, and it seems that they can get a little out of sync. But apparently just rejecting times that go backwards tends to fix the problem fairly well.
see Game Timer
As an aside, I wouldn't suggest switching to System.nanotime. That particularly timer doesn't work reliably on processors with energy saving capabilities (which is common, especially on laptops) and older dual core AMD processors.
-- doesn't sound good does it?
also see NanoTime for Dual Core AMD systems
-- this one has some sample code for dealing with the problem.