Ah I see what's going on. FTPS is used to refer to two different protocols. They are described as "explicit FTPS" and "implicit FTPS". Explicit FTPS connects in plain FTP mode and then switches to TLS after the AUTH command is issued by the client. Implicit FTPS connect as TLS socket, in other words the TLS handshake occurs immediately. SSLFTPClient.getServerCertificate() only works with explicit FTPS. This never actually occurred to me before, which is why I didn't mention it earlier.
Sorry to lead you up the garden path.