My own experiments suggest that .NET's SmtpClient class doesn't actually support SMTP over SSL (SMTPS). Toggling the .EnableSsl flag on your client object will instead cause the client to use STARTTLS.
This isn't surprising given that SMTPS has been deprecated in favor of STARTTLS for a number of reasons, most of which have to do with seamless interoperability between new and old clients and servers.
SMTPS: The client opens a TCP connection with the target server. The two start an SSL handshake immediately and then proceed to communicate through that SSL tunnel using the regular SMTP protocol (EHLO, AUTH, etc).
STARTTLS: The client opens a TCP connection with the target server. The client issues an EHLO and then a STARTTLS. This is done using plain text. The STARTTLS command prompts the client and server to start an SSL handshake over the already open socket. All future communication (AUTH command and beyond) is done through the now-established SSL tunnel.
This presents a problem when the SmtpClient object is connecting to a server that is expecting SMTPS. The client will send an EHLO after opening its socket instead of starting an SSL handshake immediately which will cause the server to consider the SSL handshake to have failed and the connection will stall or die. The client will timeout and you will receive an SmtpException.
Any SMTP server listening on port 465 is probably expecting SMTPS. SMTPS has its own dedicated port and cannot optionally support STARTTLS because STARTTLS by definition requires the server to accept and respond to the opening EHLO and STARTTLS commands before using SSL.
SMTP servers on traditional ports like 587 or 25 however have the option of supporting STARTTLS should the server software support it and service administrator choose to enable it. This is why many people on the Internet posting about this problem have noted that they are able to get the SmtpClient to work by changing the port from 465 to 587.
The short version: The SmtpClient class supports STARTTLS and not SMTP over SSL (SMTPS). If you want to use the .EnableSsl flag on the client object, make sure the server and port you are connecting to supports STARTTLS. If the server and port are instead listening for and expecting true SMTPS, the client object will be unable to connect successfully and the send will fail. Port 465 is almost exclusively used for SMTPS. Ports 25 and 587 are used for regular SMTP or SMTP w/ STARTTLS support when STARTTLS is available (optional).