Solution
For an RX read or for a TX write, the timeout is for the read or write command itself. It's independent of whether the device is active. The reason you get a timeout for read when the trigger has not happened is that there's no data to fetch. In this case the read command will timeout because it's still waiting for data to show up on the host. The TX write command can complete without the device generating because a write is defined as the function to push data from the host to the output buffer. The device doesn't need to be generating in order to push data into the output buffer.
This is expected behavior because of the way that we define reads and writes. The proper way to check whether a trigger has occurred is to poll either the tx.state or tx.samples processed front panel controls on the FPGA.