There was a stupid precedence error in the original code, this may be related to it?
LPOLESTR pOle = ((_lpa = (char*)m_pData) == NULL) ? NULL : ATLA2WHELPER((LPWSTR) alloca(m_length + 1*2), _lpa, m_length);
should be
LPOLESTR pOle = ((_lpa = (char*)m_pData) == NULL) ? NULL : ATLA2WHELPER((LPWSTR) alloca((m_length + 1)*2), _lpa, m_length);