The note that states that audit login and logout events are not fired when a connection is reused from pool might need to be revised.
The documentation for both these classes on MSDN itself states that "Events in this class are fired by new connections or by connections that are reused from a connection pool."
There is a simple way to find evidence about this. If you enable the performance counte on a SQL server and add the counters for
\MSSQL$[instance]:General Statistics\Logical Connections
\MSSQL$[instance]:General Statistics\Logins/sec
You can see how these values evolves independently while an application is running. You can also test it against the performance countes of the .NET Data provider for SqlServer (NumberOfActiveConnections, NumberOfActiveConnecionsPools and so).
This is an important issue when designing the data access strategy. While an application might be keeping no more than fifty open connections to a database as part of a connection pool, the server could be unable to resolve a much more higher number of logins/logout when intensive exchange of connections (opening=retrieving; closing=releasing) is in being made with the connection pool.
It seems that there is a clear difference between keeping the connection open (the link with the database server) and prepearing that connection before executing a new batch of sql instructions and also cleaning up that connection after the batch is executed (creating a proper environment to isolate each user execution).