Can we confirm what Control you are actually using?
Is it a "DropDown", or is it a "ComboBox"?
Annoyingly - these 2 controls have different behaviours, with one being the opposite of the other.
It would seem that for a "DropDown", the OnChange event does NOT fire when the selected value is changed programatically (including when a form resets)
However, for a ComboBox - the OnChange event DOES fire when the selected value is changed programatically, or on Form Reset, when the ComboBox is in a form. Note that the OnChange event does NOT fire off if the SearchText is changed - only when a valid result is picked.
It is also worth noting that the ComboBox.OnChange event actually fires BEFORE the item is selected, so be careful using "ComboBox.Selected" in the OnChange event - it will give you what the ComboBox USED to be set to, NOT what it is actually changed to...
There are all sorts of errors, bugs and inconsistencies in the PowerApps controls - A typical example of many Silo'd teams working on different controls for PowerApps - things that should work the same way work differently for different controls, or simply not at all.
Another good example is the ListBox Control - you can have "Multi-Select = true", but there is no way to set multiple "SelectedItems" like in a Drop-down or ComboBox. Although, even that doesn't work correctly for ComboBox or DropDown - it only sets the DISPLAY Selected Items, it doesn't actually set the "SelectedItems" Property of the control that can be consumed at runtime.
Between these bugs, and the inability to manage the RACE conditions of Asynchronous functions, PowerApps is pretty much unusable for any decent sized project, and only suitable for smaller "helper" Apps. Such a shame really, as without these glaring (and dare I say "Schoolboy") errors, it could be such a good platform...