I ran into this issue myself. I got it to work in the following way:
$message['from'] = "firstname.lastname@example.org";
$message['headers']['From'] = 'Name TO SHOW <email@example.com>';
$message['headers']['Sender'] = $message['headers']['Return-Path'] = $message['from'];
However, like you, I thought adding
$message['from'] = 'firstname.lastname@example.org'; is the way to go and I think it should -Perhaps other folks can chime in and let us know if this is a bug?
In any case, it seems drupal does more processing and checks to verify the
from email address and if it does not pass all the checks it sets it to the sitemail, or the mail library just use the other headers. Note I think this behavior may differ based on which mail library you are using. In my case, and I presume in yours, its PhpMail.php.
The solution above worked but I am not sure if it's the most appropriate or if it would work for others who are using different mail managers..