Snapping any face to any other face works quite reliably with a custom Transform Orientation and a helper object as described in How to Align Any 2 Faces .
Snapping to any face in Blender 2.8
We want to have this, but the round object is rotated in an unsuitable fashion.

Step 1 – Select the face to align in edit mode, and create a new Transform Orientation (called “Face” here). Back in object mode, add a new plane.

Step 2 – Select the plane and apply the “Face” Transform Orientation with Object > Transform > Align to Transform Orientation. This rotates the plane so its normal points the same way as the normal of the previously selected face. Then, parent the object to the plane.

Step 3 – Select the plane, reset its rotation with Alt+R
to rotate it together with the object so the face normal aligns with the global coordinate system. In this case, the object needs to be flipped by another 180°.

Step 4 – Apply the rotation with Ctrl+A
. Now the object can be snapped to any face with face snapping and “Align rotation to Target” checked.
