@TheMan . Thanks! Instead of deleting rows within an Apply To Each step, I simply have a SharePoint step to copy a blank sheet (identically named but in a different folder) into the current folder overwriting the current file. I feared there might be a unique identifier other than file name that the flow uses but that doesn't appear to be the case.
I had the exact same issue (trying to delete all rows in a onedrive excel table through an azure logic app). And implemented a solution similiar to @TheMan , List all rows in a table, then run a foreach loop on the returned list, then run a "delete a row" excel action in the foreach loop where the column content is equal to the current item's column content. And I ran into the same problem where in the foreach loop, it only deleted 1 row from excel, no matter how many foreach iterations ran. My solution was going into the foreach loop control's settings and turning on "Concurrency control" and setting the limit to 1. This way it actually deletes all the rows in the table in the foreach loop without having to add seconds delay etc. Hope this helps for anyone in the future with the same problem