The buffer called Customer is merely the *default* buffer for the table. Some of us do almost all or all update using non-default buffers simply because they make it very clear where the record scope is and thus better control over locking and transaction scope.
Here, the main program is reading Customer no-lock, so clearly the record needs to be re-read in order to update it. You should always do this in a different buffer, even if within the same block to avoid confusing the outer loop in terms of position and status.
The second buffer is defined in the internal procedure. Again, you should almost always define such a buffer to limit the scope of the lock and transaction to the internal procedure.
I can't say that I approve of naming this buffer b. No confusion in something this short, but why not bfCustomer or some such so that it is immediately apparent what it is?