Well then you don't have a causality violation! Anyhow, the July 2 arrival date for the second transmission is simply wrong! Time dilation causes the perception of the passage of time at the other end to 'slow down' for the object in motion, it does not cause time to reverse! Since both ends experience the time dilation effect relative to the other end, all transmitted replies arrive locally after the local time at which the transmission replied to departed. The transmitted reply may arrive in the transmitter's "past" but it gets received in the recipient's "future"..
There is no causality loop within a single inertial frame!
Not quite. The recipient is always getting messages earlier (in the recipient's frame) than the date of the sender's reference frame. Always. So if the ship gets the July 4 message (earth date) on July 3 (ship date), and then the ship responds (on July 3, ship date) it will arrive on earth earlier than the ship's date! The recipient always gets the message earlier (recipient's date) than the transmission according to the sender's date.
There is no causality loop within a single inertial frame!
True. But when you're receiving messages from a different frame ...