Is there a way I can change the fixed regular hours in an open pay run, without being forced to use absent hours codes and without changing the employee to being paid per hour?
No, if in an employee a fixed number of regular hours is entered, this number of hours will end up in a pay run and you cannot change it. That's because these hours are the fixed hours per month and 'fixed' does not men 'variable'.
In that case it will be necessary to enter 'extra hours' on wage 'Extra hours 100%' and 'less hours' on wage codes like 'Hours absence' or 'Hours not worked'.
Or, as you mention yourself, you can enter no fixed hours in the employee and set him/her on a wage per hour. In that case you just have to enter the actual hours worked, which might be more or less than 'usual'. If you do so, please be aware to check the pension premium settings. If it is set as an 'percentage' you will have to change it to 'fixed amount' and enter the amounts. Because a percentage of a fixed salary of nil, will be a pension premium amount of nil.