I think I know why. When your form is running in the browser, your code (aka business logic) gets executed on the server-side when data gets sent to the server (this is also known as a postback).
By default, Forms Server figures out by itself when to do a postback. However, this is not the case for changed events.
To verify my claim, make a change to your dropdown then click the button. Both pieces of code will end up running.
In order to fix this behaviour, bring up the dropdown properties, select the "Browser forms" tab and change the postback settings to "Always" instead of "Only when necessary".
Good luck!
David Airapetyan / Software Services ArchitectQdabra® Software / Streamline data gathering to turn process into knowledge