Pulling Data Across Entry Types
To access related entries stored in a matrix field, you need to specify the targetElement (actor/entry) and the matrix field (using dot syntax 'matrixFieldHandle.entriesFieldHandle') from 'plays'. 

In your actor biography template:

Actor: {{ entry.title }}&lt;br&gt;&lt;br&gt;

{% set plays = craft.entries.section('plays').relatedTo({
    targetElement: entry,
    field: 'actorsMatrixFieldHandle.actor'
}) %}

Plays:
&lt;ul&gt;
    {% for play in plays %}
        &lt;li&gt;
            {{ play.title }}&lt;br&gt;
            {% if play.onStage %}
                &lt;span class="onstage"&gt;ON STAGE&lt;/span&gt;
            {% endif %}
        &lt;/li&gt;
    {% endfor %}
&lt;/ul&gt;


To get the role is little more difficult — you first need to find the actor's matrix block in the related 'play' record. We can do this by testing each block to see if it matches the current entry (actor), or use an if clause in the loop.

&lt;ul&gt;
    {% for play in plays %}

        {% set role = '' %}
        {% for block in play.actorsMatrixFieldHandle if block.actor.first.title == entry.title %}
            {% set role = block.role %}
        {% endfor %}

        &lt;li&gt;
            {{ play.title }}&lt;br&gt; 
            {{ role }}&lt;br&gt;
            {% if play.onStage %}
                &lt;span class="onstage"&gt;ON STAGE&lt;/span&gt;
            {% endif %}
        &lt;/li&gt;

    {% endfor %}
&lt;/ul&gt;


You could also try to set the title field as a parameter to the Matrix block query:

{% set actorBlocks = play.actorsMatrixFieldHandle.title(entry.title) %}
{% set role = actorBlocks|length ? actorBlocks.first().role : '' %}