I've read up on this quite a bit and I can't figure out why I would have Red X's (Collisions?) with a simple Dual-Port BRAM IP core.
I think there are only a few scenarios that can cause this:
Multiple sources: I checked and I don't have multiple sources diving current_row_data_out. I only read from it.
Simultaneous Read + WRite to the same address: Nope. As you can see in the image, read_addr and write_addr are always different.
What else can it be?
The issues was caused by one or two writes of uninitialized data all the way in the beginning of the simulation. It created a chain-reaction that didn't show up until later because the values read in the beginning were coincidentally correct.