PB + Queueable System.FinalException: Record is read-only

I suspect that you've unwittingly copied the "isReadOnly" flag on the sObject records. This flag, which can't be accessed or modified directly, is responsible for causing the FinalException that you're getting. You should be able to get around this by deep-cloning the list first:

public List<SObject> setFieldValues(List<SObject> sobjList, Map<String,Object> fieldNameValueMap, IfInvalid invalidAction) {
  sobjList = sobjList.deepClone(true, false, false);
  ...