When running top -b -n 1, the command always returns the same CPU values. Consider the following test run 5 times in succession:
[user@server ~]$ top -b -n
Top doesn't know what process time counts were before it starts, so it makes a guess in the first pass, based on a variety of factors like load average and waiting threads.
You can see the same effect if you start top interactively and quickly examine the first batch of results it returns.
Simple solution: top -b -n 5 -d.2 | grep "Cpu(s)" | tail -n+2