If an entity runs a large amount of relay nodes on the network, they could figure out which of their nodes was the first to see a transaction, and which peer that transaction came from. That does not necessarily tell them the originating IP, as it could have been a a node relaying a transaction rather than sending one.
This leaves a large amount of uncertainty in the trace. Due to the decentralized nature of Bitcoin, no single entity is likely to be in control of the majority of relay nodes. Let's say, for arguments sake, that there is a company that runs 40% of all relay nodes. They have a very good chance that a wallet sending a transaction is directly connected to one of their nodes, and therefore they can work out the originating IP. But what about the other 60% of nodes? Can they ever say for sure that a transaction didn't bounce around the other 60% for a few hops before they saw it? No, and odds are petty high that just that happens often. And to my knowledge, no single entity runs that many nodes.
Point is, the more relay nodes there are, the less possible it is to trace an originating IP address.