The issue here arises due to an error on my part in l3coffins. There, you will find
\cs_new_protected:Npn \vcoffin_set:Nnn #1#2#3
{
\coffin_if_exist:NT #1
{
\vbox_set:Nn #1
{
\dim_set:Nn \tex_hsize:D {#2}
\color_group_begin:
\color_ensure_current:
#3
\color_group_end:
}
\coffin_reset_structure:N #1
\coffin_update_poles:N #1
\coffin_update_corners:N #1
\vbox_set_top:Nn \l_coffin_internal_box { \vbox_unpack:N #1 }
\coffin_set_pole:Nnx #1 { T }
{
{ 0 pt }
{ \dim_eval:n { \box_ht:N #1 - \box_ht:N \l_coffin_internal_box } }
{ 1000 pt }
{ 0 pt }
}
\box_clear:N \l_coffin_internal_box
}
}
The problem is with the \color_ensure_current: line, which is incorrect. In the SVN, this line is removed. This fix will appear in the next CTAN snapshot, which is expected some time in June. In the meantime, you can fix it locally by using
\usepackage{expl3}
\ExplSyntaxOn
\cs_set_protected:Npn \vcoffin_set:Nnn #1#2#3
{
\coffin_if_exist:NT #1
{
\vbox_set:Nn #1
{
\dim_set:Nn \tex_hsize:D {#2}
\color_group_begin:
#3
\color_group_end:
}
\coffin_reset_structure:N #1
\coffin_update_poles:N #1
\coffin_update_corners:N #1
\vbox_set_top:Nn \l_coffin_internal_box { \vbox_unpack:N #1 }
\coffin_set_pole:Nnx #1 { T }
{
{ 0 pt }
{ \dim_eval:n { \box_ht:N #1 - \box_ht:N \l_coffin_internal_box } }
{ 1000 pt }
{ 0 pt }
}
\box_clear:N \l_coffin_internal_box
}
}
\ExplSyntaxOff
in your preamble.
For those who would like to know why this is happening, the way that the T pole is set is ultimately using the \vtop primitive. That will only give the correct box height if the very first item in a vertical box is itself a box. The \color_ensure_current: function creates a whatsit, which therefore breaks the calculation. So for the moment this line has been removed (mirroring LaTeX2e box behaviour, where only hboxes ensure that the current colour is used for the foreground).