Here is something from the docs (emphasis is mine):
ILM runs periodically, checks to see if an index meets policy criteria, and executes whatever steps are needed.
It's controlled by indices.lifecycle.poll_interval, which defaults to 10 minutes. See Index lifecycle management settings in Elasticsearch | Elasticsearch Guide [7.15] | Elastic
So when ILM ran for your index, the size of the index was above 50gb (but not equal to 50gb). That's why you have approximately a bit more than 50gb per shard.
If you want to be closer to he 50gb, you can decrease this value.