EDIT: download the module that encapsulates this behaviour and does a lot more besides: read this blog.
If you haven't noticed the stored structure of fields in an entity, like a node, is not simple:
$entity ->fieldname[language][delta] = [item]
The Field API does contain useful functions for manipulating these values, so if you have a $node and a field_myfield, you can get the current items like this:
$items = field_get_items('node', $node, 'field_myfield', $node->language);
Which returns an array of the items in the field, indexed by their delta value.
The actual content of each item will be dependent on what it is, a simple textfield will have array('value' => [text]) while a term reference will have array('tid' => [tid]), a "longtext with summary" (such as the standard "body" field) has several values: for the main body ('value'), for the summary ('summary'), for the filter format ('format'), and already processed "safe" values of both the body (safe_value) and the summary (safe_summary).
You can find this, and other useful functions, at Field API.
EDIT: I now have a super-duper function that extracts values for you here.