Why does find-certificates have some missing?
This is due to a combination of two factors:


Specifying the SystemRootCertificates.keychain is necessary, otherwise a personal keychain is used.
openssl will not parse a stream of multiple keys into a stream of text.


The following runs openssl once per certificate and accomplishes what I was looking for:

security find-certificate -a -p /System/Library/Keychains/SystemRootCertificates.keychain \
| awk '/-----BEGIN CERTIFICATE-----/ { cert = "" } \
       { cert = cert $0 "\n" } \
       /-----END CERTIFICATE-----/ { \
           openssl = "openssl x509 -text"; \
           print cert | openssl; \
           close(openssl) \
       }'