You can simply change adminhtml cookie name for subdomains.
Two changes in file app/code/core/Mage/Core/Controller/Varien/Action.php
.
In function preDispatch
change lines
/** @var $session Mage_Core_Model_Session */
$session = Mage::getSingleton('core/session', array('name' => $this->_sessionNamespace))->start();
to
$namespace = $this->_sessionNamespace.($this->_sessionNamespace=='adminhtml' && $_SERVER['SERVER_NAME']=='subdomain.example.com'?'_subdomain':'');
/** @var $session Mage_Core_Model_Session */
$session = Mage::getSingleton('core/session', array('name' => $namespace))->start();
In function setRedirectWithCookieCheck
change
/** @var $session Mage_Core_Model_Session */
session = Mage::getSingleton('core/session', array('name' => $this->_sessionNamespace));
to
$namespace = $this->_sessionNamespace.($this->_sessionNamespace=='adminhtml' && $_SERVER['SERVER_NAME']=='subdomain.example.com'?'_subdomain':'');
/** @var $session Mage_Core_Model_Session */
$session = Mage::getSingleton('core/session', array('name' => $namespace));
And after that search for text
Mage::getSingleton('core/session', array('name' => 'adminhtml'));
in all files and replace it with
Mage::getSingleton('core/session', array('name' => 'adminhtml'.($_SERVER['SERVER_NAME']=='subdomain.example.com'?'_subdomain':'')));
if any occurances would be found.