The NOACCESSCHECK is designed to suppress some read-only scenarios. If the entire MBO is flagged as read-only, like we do when we don't intend for the records to be modified at that point, the NOACCESSCHECK is insufficient. On out of the box objects, you need to be really cautious about doing this because it could cause issues.
Assuming this is your own non-persistent attribute and your confident it won't try and update other things, you can try to change the flag in your script prior to setting the value and then set it back to read-only.
mbo.setFlag(mbo.READONLY,False)
mbo.setValue("YOURFIELD","YOURVALUE",mbo.NOACCESSCHECK)
mbo.setFlag(mbo.READONLY,True)
------------------------------
Steven Shull
IBM
------------------------------