Holy cow, I wrote a book!
Here's an analogy:
Suppose somebody tells you,
"I am going to count to 100,
and you need to give continuous estimates as to when I will be done."
They start out, "one, two, three...".
You notice they are going at about one number per second,
so you estimate 100 seconds.
Uh-oh, now they're slowing down.
"Four... ... ... five... ... ..."
Now you have to change your estimate to maybe 200 seconds.
Now they speed up: "six-seven-eight-nine"
You have to update your estimate again.
Now somebody who is listening only to your estimates and
not the the person counting thinks you are off your rocker.
Your estimate went from 100 seconds to 200 seconds to 50 seconds;
what's your problem? Why can't you give a good estimate?
File copying is the same thing.
The shell knows
how many files and how many bytes are going to be copied,
but it doesn't know know how fast the hard drive or network
or internet is going to be, so it just has to guess.
If the copy throughput changes, the estimate needs
to change to take the new transfer rate into account.