Yeah, the difference is the difference between "could this string be converted into a number without getting the warnings if -w is on?" vs "is this value always and only a number?". Everything in the latter case is also true for the former, but the inverse is not true. For example, all external data read from filehandles is always a string initially, so it could never pass this "is_numeric" test.
Lots more on this topic came up recently. See Detecting if a scalar has a number or string, which includes a lot of discussion about how to treat objects that overload like numbers. I personally like Re^3: Detecting if a scalar has a number or string by davido, which ducks a lot of the issues and tests to see if a given input would generate a warning if used in arithmetic -- which is what I usually find myself wanting to check when I'm being given user input (as opposed to whether something is represented internally as a number or string).
Code posted by xdg on PerlMonks is public domain. It has no warranties, express or implied. Posted code may not have been tested. Use at your own risk.