No, it is not a bug. Each call to _dml_getData() causes the current setting of $this->rows_per_page to be used in the LIMIT clause. Your code appears to be running inside an UPDATE1 pattern, and if you look inside file 'std.update1.inc' you will see the line:
$dbobject->setRowsPerPage(1);
which tells the system to extract and display 1 record at a time. This setting is still in operation when your custom code is being executed. To remove all limits you must insert the following line before any calls to $this->_dml_getData():
$this->rows_per_page = 0;
Do not forget to reset it aferwards.