Fix return type covariance bug

Clean up and document the covariance check too.