Based on the wiki linked in the answer posted by @Steven Shull, I came to the understanding about the proper use of the beforeMboData() and afterMboData() callback functions defined in the Object Structure inbound processing Automation Script. What I was failing to grasp was that because I was using afterMboData(), the MIF had already set the Mbo attribute I was wanting to update using an access modifier that prevented further changes by any process, including my code in the afterMboData() callback.
Instead, I ended up implementing the beforeMboData() callback, which allows me to set the Mbo attribute, but I need to ensure that I use the appropriate access modifier so that the MIF process does not overwrite my implementation (see my new code example below):
# OSIN.MYOBJSTRUCT
def beforeMboData:
struct = ctx.getData()
if struct.isInCurrentData("DESCRIPTION_LONGDESCRIPTION"):
ctxMbo = ctx.getMbo()
# Assume the Obj Structure field DESCRIPTION_LONGDESCRIPTION has the value "some old value"
ctxMbo.setValue("DESCRIPTION_LONGDESCRIPTION", "SOME NEW VALUE!", MboConstants.DELAYVALIDATION)
# The Mbo attribute now is updated and will prevent any other modification by further MIF processing that executes subsequently