It spins because that is optimal for latency and how the shared-memory protocols work.
As blocking poll is largely incompatible with low-latency and shared-memory protocols, I don't think there is any implementation that is going to do a good job at this, since it would not be very appealing to the majority of MPI users.
On the flipside, MPI would be more attractive to some
(latency-insensitive) users if the implementations were not so committed
to spinning.