page "/node/add" that I would like to programmatically limit the links that are displayed based on the users role
If you set node creation permission (Node Module on www.yourhost.com/admin/user/permissions) to specific roles, the existing form should take care of this automagically by itself, eg, if the user accessing www.yourhost.com/node/add can't create a specific node type, it won't be presented on that page.

Based upon commentary, node/add is built via:

function node_add_page() {
  $item = menu_get_item();
  $content = system_admin_menu_block($item);
  return theme('node_add_list', $content);
}   

/** 
 * Display the list of available node types for node creation.
 *  
 * @ingroup themeable
 */ 
function theme_node_add_list($content) {
  $output = '';

  if ($content) {
    $output = '&lt;dl class="node-type-list"&gt;';
    foreach ($content as $item) {
      $output .= '&lt;dt&gt;'. l($item['title'], $item['href'], $item['localized_options']) .'&lt;/dt&gt;';
      $output .= '&lt;dd&gt;'. filter_xss_admin($item['description']) .'&lt;/dd&gt;';
    }
    $output .= '&lt;/dl&gt;';
  } 
  return $output;
} 


so you most certainly could create a new YOURTHEME_node_add_list() function that filters the links based upon a user's role realizing that if the user entered the link directly it would nonetheless still work.

You could also create a node-add-list.tpl.php in your theme's directory with basically this in it as a start:

&lt;?php

  $output='';

  if ($content) {
    $output = '&lt;dl class="node-type-list lrfm-ed"&gt;';
    foreach ($content as $item) {
      $output .= '&lt;dt&gt;'. l($item['title'], $item['href'], $item['localized_options']) .'&lt;/dt&gt;';
      $output .= '&lt;dd&gt;'. filter_xss_admin($item['description']) .'&lt;/dd&gt;';
    }
    $output .= '&lt;/dl&gt;';
  } 
  print $output;


and then modify it however you wanted.

Just flush caches after either to make drupal's theme system see and pick up the changes.