Yes, you could check for changes on the profile_updateprofile hook and then insert a log into a custom table.
A simplified example of what this might look like:
PHP Code:
$newvalue = $vbulletin->GPC['userfield']['field2'];
$oldvalue = $vbulletin->userinfo['field2'];
if ($oldvalue <> $newvalue) {
$db->query_write("
INSERT INTO profilelog (oldvalue,newvalue)
VALUES ('".$db->escape_string($oldvalue)."','".$db->escape_string($newvalue)."')";
}