I2C slave not acknowledging consistently
As discussed in the comments above, the solution in this case was to increase the frequency of the I2C transmissions.

Per the datasheet, the Cypress CapSense controller gives a NACK on the first I2C transaction after waking into the active state. As @Roger Rowland noted, after around 340 ms of inactivity on the bus, the controller goes into a low-power state. Since my transmissions were spaced further apart than this timeout, each transmission would wake the device from the low-power state into the active state and receive a NACK. This problem is resolved by increasing the frequency of the transmissions to less than the timeout value, or by repeating a given transmission back-to-back until an ACK is received.