OK...the following rules seems to work:
<p/>
<pre>
rule "Assign awardable activity to default context"
        ruleflow-group "select qualified activity"
        when
                $context : ResultContext( activity != null &&
                        activity.qualifiedActivity == null )
                $activity : Activity() from $context.activity
                $candidate : CandidateMatch( member != null && 
                        match != null &&
                        eval( match instanceof QualifiedActivity))
                eval(((QualifiedActivity)$candidate.getMatch()).isAwardable())                
        then
                modify($activity){
                        setQualifiedActivity((QualifiedActivity) $candidate.getMatch());
                }                
end
</pre>

The key seemed to be to modify the activity directly in working memory rather than traversing to it from the context. Not sure if this gives any hints towards why drools is throwing a NullPointerException in the prior case.
<br><hr align="left" width="300">
View this message in context: <a href="http://drools-java-rules-engine.46999.n3.nabble.com/NullPointerException-modify-tp818403p818575.html">Re: NullPointerException @ modify()</a><br>
Sent from the <a href="http://drools-java-rules-engine.46999.n3.nabble.com/Drools-User-f47000.html">Drools - User mailing list archive</a> at Nabble.com.<br>