I've logged the buffer and window point at certain lines (most important is before/after erase-buffer on line 1911) in a few run throughs of proced-update, first when the selected window displays a proced buffer:
before update: window point: 20121, buffer point: 20121
after goto-char min: window point: 1, buffer point: 1
before erase buffer: window point: 1, buffer point: 1
after erase buffer: window point: 1, buffer point: 1
after update: window point: 20121, buffer point: 20121
So this is expected since buffer point always mirrors window point for the selected window's displayed buffer. Next, when the selected window doesn't display a proced buffer, but there does exist a window displaying a proced buffer (the window point logged corresponds to the window point of the window containing the proced buffer):
before update: window point: 20235, buffer point: 20235
after goto-char min: window point: 20235, buffer point: 1
before erase buffer: window point: 20235, buffer point: 1
after erase buffer: window point: 1, buffer point: 1
after update: window point: 1, buffer point: 20235
So my understanding is since the selected window does not display a proced buffer, the window point is not updated in line with the buffer point, but the erase-buffer call sets the window point to start of the buffer, and so this is not updated in line with the buffer point in the subsequent insertion of processes.
The last case (the second issue) where no window shows a proced buffer is similar to the previous, but erase buffer instead appears to set pos for the proced buffer's value in (window-prev-buffers) if it's the case a window has shown a proced buffer previously.