The difference when I tested the described scenario was that I had the Value property bound with value set, so the first ValueChanged event was fired during loading.
Anyway, the described behavior is the expected one. Since at the beginning the value is not set, when you type in something the NumericUpDown sets the value to the Maximum (in case the input is greater). After that when typing in greater value the event is not fired as the value is not set, since the input is invalid. The ValueChanged event is fired again when a negative number is typed in, as this time the value is set to the Minimum. That is why when typing in positive and negative numbers one after another the ValueChanged event is fired as the value is set to the Minimum or Maximum.
Does this clears out the manner?
Check out Telerik Analytics, the service which allows developers to discover app usage patterns, analyze user data, log exceptions, solve problems and profile application performance at run time. Watch the videos
and start improving your app based on facts, not hunches.