Ok, os this one is a little complex but I've debugged to the offending code and heres an example:

I have a content type called 'album', which simply holds a list of node-references in a field.

I have a content type called 'page', in this page is a node reference field for a page album (a reference to the above album type). Also on a 'page' is a node reference to 'featured pages' which have the teaser displayed.

I create 2 pages, with different content but that reference the same album. Both pages are fine. I make a 3rd page and in the featured pages i reference both these first 2 pages.

When displayed the teaser renders correctly for the first node in the featured pages list, the second fails because the node is not present in the object (at the template level), instead it is an objecto ftype 'link'!!

I've tracked down the offending code, its in node_reference.module (latest 7.x-2.0-dev) and staerts line 503:

      // Assemble the render array.
      foreach ($items as $delta => $item) {
        if ($item['access']) {
          if (isset($nodes_display[$item['nid']])) {
            $result[$delta] = $nodes_built['nodes'][$item['nid']];
          }
          else {
            $node = $item['node'];
            $label = entity_label('node', $node);
            $uri = entity_uri('node', $node);
            $result[$delta] = array(
              '#type' => 'link',
              '#title' => $label,
              '#href' => $uri['path'],
              '#options' => $uri['options'],
            );
            if (!$node->status) {
              $result[$delta]['#prefix'] = '<span class="node-unpublished">';
              $result[$delta]['#suffix'] = '</span>';
            }
          }
        }
      }

It seems if there is a node in the tree of items that is referenced twice the reult is replaced with a 'link' #type object. this is what is happening in my example above.

There is a clue in the comments above for this function:

// @todo Bug: $entity->referencing_entity on nodes referenced in a different
// thread on the page. E.g: 1 references 1+2 / 2 references 1+2 / visit homepage.
// We'd need a more accurate way...

My question is, why don't you append the built node object in the case of the node being referenced more than once? forcing a 'link to title' type object for repeats causes problems when the template is parsed and expects the fileds to be there, not a link object...

It may be related to recursion_queue issues raised in the past (ie do we need it?) .

I'm about to hack the module to remove this behaviour, and wanted to ask if I'm treading on thin ice or if I'm gonna cause serious recursion?