Chirp z algorithm clarification
Ok, after some head scratching and re-re-re-reading I realize what I was missing. When creating the chirp signal used in convolution, the values of (k - n) which result in a negative need to be wrapped around and placed at the end of the signal rather than in the beginning.

So, replacing:

// Create y[n] by performing the following:

value = 1 - N&lt;br&gt;
for n = 0 to n = 2N - 1&lt;br&gt;
y[n] = e^i(PI / N * value * value)     // W^((k - n)^2 / 2)
value = value + 1&lt;br&gt;
next n


With the following:

// Create y[n] by performing the following:

// Take care of values of k - n which are greater than zero.
for n = 0 to N - 1
y[n] = e^i(PI / N * n * n)

// Add the zero padding.
for n = N to M - N
y[n] = 0

// Now place the negative values at the end of the signal
for n = 1 - N to -1
y[M + n] = e^i(PI / N * n * n)


Yields the expected results.