I might be late to the party, but for everyone looking for the solution of this problem, below solution might be helpful.
Basically what Ivan wrote works fine if the inherited record has no <data noupdate="1">. What noupdate="1" does is to prevent subsequent module upgrade to override the current value of the fields, thus no matter how many times you pressed the upgrade button, no changes will take effect.
To overcome this problem, you have to do the following:
<!--Find the corresponding "to be inherited record" with noupdate="1" -->
<function name="write" model="ir.model.data">
<function name="search" model="ir.model.data">
<value
eval="[('module', '=', 'crm'), ('name', '=', 'crm_rule_personal_lead')]"
/>
</function>
<!--Set noupdate to False-->
<value eval="{'noupdate': False}" />
</function>
<!--Finish the job, i.e. inheriting/modifying some fields-->
<record id="crm.crm_rule_personal_lead" model="ir.rule">
<field name="field_to_be_changed">field_value</field>
</record>
<!--Optional, if you want to set noupdate to True again-->
<function name="write" model="ir.model.data">
<function name="search" model="ir.model.data">
<value
eval="[('module', '=', 'crm'), ('name', '=', 'crm_rule_personal_lead')]"
/>
</function>
<!--Set noupdate to True-->
<value eval="{'noupdate': True}" />
</function>
Hope it helps!