There should be a more obvious way to do this (or, the border should automatically be hidden when the column headers are hidden), but the solution is simple.
Just add the following to your gridpanel configuration:
bodyCls : "x-docked-noborder-top"
This is for ExtJS 4.x (but I believe also worked in 3.x). Fingers crossed that the Sencha guys give us a more elegant solution for 5.0 when it arrives in 2014.