I'm using a waveform with 1,000,000 points, much larger than the board's on-board FIFO. So the entire half-buffer is not being sent at one time.
Upon further investigation into this behavior, it appears that if the waveform is currently generating any part of the portion you wish to change, it does not make that change until the next iteration, irrespective of any half-buffer issues. For example, assume the portion between points 200,000 and 800,000 of a 1,000,000 point waveform are to be changed. Note this crosses the half-buffer boundry. If the call to DAQmxWriteRaw is made when the waveform is at point 150,000, the entire changed portion is observed in the current iteration. It takes approximately 20 msec to complete the DAQmxWriteRaw call. If th
e call to DAQmxWriteRaw is made when the waveform is at point 300,000, none of the changed portion is observed until the next iteration, not even the portion after the half-buffer (points 500,000 to 800,000). It takes hundreds of msec to complete the DAQmxWriteRaw call. The waveform clock rate was 500kHz or 2 sec total duration. If the call to DAQmxWriteRaw is made when the waveform is at point 600,000, none of the changed portion is observed until the next iteration. It takes less time to complete the DAQmxWriteRaw call than making the call when at point 300,000. So it appears DAQmx analyzes where it currently is in the waveform cycle and waits until it is not generating any of the range to be changed and only then changes its internal memory buffer over the desired portion of the waveform data.
So it is possible to change part of the half-buffer currently being generated, as long as no part of the portion to be changed is currently being generated.