That's an interesting problem.
According to the Wiki they should fire in order, but the SERVER_DATA is also tied to the TCP::collect.
SERVER_CONNECTED - Triggered when a connection has been established with the target node.
SERVER_DATA - Triggered when new data is received from the target node after TCP::collect command has been issued.
Perhaps this is related to the issue you are having:
Causes TCP to start collecting the specified amount of content data. After collecting the data in a clientside event, the CLIENT_DATA event will be triggered. When collecting the data in a serverside event, the SERVER_DATA event will be triggered.
It is important to note that, when an explicit length is not specified, the semantics of TCP::collect and TCP::release are different than those of the HTTP::collect and HTTP::release commands. With TCP::collect, the event for processing the data (CLIENT_DATA or SERVER_DATA ) will fire without TCP::release being called, whereas with HTTP::collect, the event (HTTP_REQUEST_DATA or HTTP_RESPONSE_DATA) will not fire without HTTP::release being called.
TCP::collect: http://devcentral.f5.com/wiki/default.aspx/iRules/TCP__collect.html