There are a couple of plausible reasons for which your Dataflow job does not keep the two workers until the end:
-1st: Either the full job or some task is not parallelisable. Dataflow will remove the second worker in order for you not to incur in additional costs while the worker is idle.
-2nd: If the workers are using on average less than 75% of their CPUs over two minutes, and the streaming pipeline backlog is lower than 10 seconds (1).
Please bear in mind that scaling down does not occur automatically as Dataflow is, in this sense, conservative. Normally, Dataflow will spend more time trying to add workers than using them. It's for that reason that when you expect a high workload with sharp peaks, it is advisable to set a high starting number of workers.
On the other hand, if only 1 of the two workers is being used, the total amount of time will be the same regardless of whether you set the number of workers to 1 or 2. To better understand this concept, let me give an example:
Imagine you have an algorithm that produces a sequence of
pseudo-random numbers where each value computation depends on the last
number. This is a task where it does not matter if you have 1 or 100
workers, it will always work at the same speed. But at the same time,
for other use cases, for example if each number doesn't depend on the
previous one, this task would be approximately 100 times faster with
100 workers.
All in all, Dataflow considers the parallalelisability of each task and, depending on the rules stated in (1), scales up and down. A higher number of workers may or may not be faster, but it will be more expensive.
Please take a look at (2) for a better insight on Parallelization and distribution in Dataflow. I've also found these two Stack Overflow questions (3) and (4) that might help shed some light on your question.