You can do that using 2 pseudo elements
CSS
.test
{
    width: 400px;
    height: 150px;
    position: relative;
    border: 1px solid green;
}
.test:before, .test:after {
    content: "";
    position: absolute;
    top: 0px;
    right: 0px;
    bottom: 0px;
    left: 0px;
    opacity: 1;
}
.test:before {
    background-color: red;
    z-index: 1;
    transition: opacity 1s;
}
.test:after {
    background-color: green;
}
.test:hover:before {
    opacity: 0;
}
(hover to transition)
To be able to see the div content, the pseudo elements need to be in negative z-index:
looks like IE won't trigger this hover
.test:hover:before {
    opacity: 0;
}
but will trigger this one
.test:hover {
}
.test:hover:before {
    opacity: 0;
}
(As SILLY as it seems)
fiddle for IE10