Yes, the "fundamentally wrong" is a right term.
You face the fundamental difference between JSF 1.1 and JSF 1.2
Action Listener, defined with actionListener attribute is invoked first (i.e. before assignTo). This issue is a subject for Migration Guide (http://docs.google.com/Doc?id=ddmtrs6k_34w8n9rdt5)
Actually, actionListener is depricated in JSF 1.2
Using f:actionListener (defined after a4j:actionparam) is a right way to go. JSF will invoke listener in the order they are mentioned on the page.