What you see is caused by your low timeout values.
Connections between the exchange servers and ActiveSync clients/outlook use long standing connections for their push mechanism. Basically they leave a TCP session open for up to 900 seconds without transmitting data. The idea is that the server will send back data once a change has happend that is “pushed”.
Now your defaults tell haproxy to drop a connection if it is idle more than 30/60 seconds:
timeout client 30000ms
timeout server 60000ms
You can also see that in your log which shows that the connection was closed by haproxy after 60 seconds (60127ms) due to the timeout being reached (code sD):
Apr 12 09:40:58 localhost haproxy[18690]: EXTERNAL-IP:57064 [12/Apr/2017:09:39:58.828] fe_ex2013~ be_ex2013_rpc/ExchCas2 3/0/0/9/**60127** 200 1601 - - **sD**-- 48/48/33/16/0 0/0 "RPC_OUT_DATA /rpc/rpcproxy.dll?7a41fb90-289c-42be-9704-a928a2b962f8@domain.com:6001 HTTP/1.1"
Details for troubleshooting the session state codes can be found in the documentation: https://cbonte.github.io/haproxy-dconv/1.7/configuration.html#8.5
Change both of these to 1000s (900s would be enough but better to be safe than sorry) and the issue should disappear. Note that this does lead to a high number of open sessions, so you might need to increase those as well (in an environment with also about 300 users we see up to 4000 open sessions just from exchange alone).
To add on that: the 401 errors that were mentioned are expected due to how exchange authentication works