A question about Proof-of-Work(PoW) I will describe my question using an example.

Let's say the network is working on adding block #100 to the blockchain. An attacker recreates block #99 with a combination of transactions that are "legit", meaning that they can be hashed to the same hash that the actual block #99 is using (and there is no double-spend).

Then, he broadcasts the block to the network. How does the network know that this block is fake and rejects it?

I think it has something to do with PoW, but I'm not 100% sure. Can someone explain to me the process of rejection with a detailed explanation?

Thanks in advance for any answers!
In your example, if block 99 actually did hash to the same exact value (infinitesimally unlikely), then there is nothing that distinguishes it from the actual block 99, so it would not be considered fake, and would not be propagated because it already exists in the inventory vector. The property of the hashing functions used to create the block hash would prevent this because without the same exact data, it will not result in the same block hash. See Digital Fingerprinting.

The block hash is created by creating a hash of all of the transactions (using a merkle tree), and hashing that along with the other meta data in the block header. Changing a transaction (even just the order of the transactions) will change the merkle root, and thus change the block hash. See https://en.bitcoin.it/wiki/Block_hashing_algorithm