theme hook and rendering
When you use render element, the element which you apply the theme to is passed into the theme function in the $vars array...the index in the array will be whatever you've set render element to in your theme function, which in this case is element; hence the element you've asked the theme API to pass in is available in $vars['element'], which is a carbon copy of the original render element.

To get the effect you're looking for you would normally use variables instead of render element:

function opengraph_theme() {
  return array(
    'opengraph_company' =&gt; array(
      'variables' =&gt; array(
        'id' =&gt; 0,
        'name' =&gt; '',
        'picture' =&gt; '',
        'link' =&gt; ''
      ),
    ),
  );
}


Then you'd build your render element like this:

$block['content'] = array(
  '#theme' =&gt; 'opengraph_company',
  '#id' =&gt; 123,
  '#name' =&gt; 'Name',
  '#picture' =&gt; 'Picture',
  '#link' =&gt; 'Link'
);


Or, if you want to use your current $data array, you can pass it directly to the theme function:

$block['content'] = array(
  '#markup' =&gt; theme('opengraph_company', $data)
);


Bear in mind with that second method any modules whose hooks might be run after yours will no longer get the chance to alter the theme output, as you're converting it down to a string.

Using either of those methods though, when your theme function is run you will have access to the variables like this:

function theme_opengraph_company(&amp;$vars) {
  $id = $vars['id'];
  $name = $vars['name'];
  // etc...
}