Does selfish mining actually give an advantage in the absence of transaction fees, difficulty changes, and economic effects?
You're missing the main point: when a selfish miner finds a new block, he keeps it private, does not broadcast it to the network, and starts mining on top of that privately.

The rest of the network is still mining on a block that was actually already found, but not broadcast.

When the rest of the network finally finds this block, the selfish miner broadcasts his version, in an attempt to replace it. 

By invalidating blocks this way a selfish miner is effectively wasting other people's cycles, and has a head start for winning the next block, because he started mining on it before the others.

Edit

Keep in mind that this practice is only successful if you're a large pool with around 25% of hashing power. Major pools of this size are closely watched and scrutinized by the entire community. Finding consecutive blocks in a row, for many times, is a strong indicator that the pool is practicing selfish mining. The community can therefore decide whether to leave the pools who are practicing this behavior.