I think it's a bug in the ListBox. Here's how I made my item template stretch out to fill the width of the ListBox. Make the container of each list item a one-cell grid, and use the grid loaded event to call a method that will stretch out the grid to the width of the ListBox.
<ListBox x:Name="lvHolePatterns" ItemsSource="{Binding HolePatterns}"
SelectedItem="{Binding ActivePattern, Mode=TwoWay}"
HorizontalContentAlignment="Stretch"
ScrollViewer.VerticalScrollBarVisibility="Visible"
Background="Gray">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Loaded="StretchFrameworkElement">
<Grid.ColumnDefinitions>
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
</Grid.RowDefinitions>
<Border Margin="0,3,5,3" BorderThickness="1" BorderBrush="SlateGray" CornerRadius="4"
RenderTransformOrigin="0.5,0.5" HorizontalAlignment="Stretch" >
<Border.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FF000000" Offset=" 1"/>
<GradientStop Color="#FF396DBE" Offset="0"/>
</LinearGradientBrush>
</Border.Background>
<StackPanel Orientation="Vertical" >
<TextBlock FontWeight="Bold" Text="{Binding Path=PatternName}" Foreground="WHITE" VerticalAlignment="Center" Margin="5,5,0,5"/>
<StackPanel Orientation="Horizontal" Margin="5,0,0,5">
<TextBlock Text="{Binding Path=HoleCount}" Margin="10,0,0,0" Foreground="WHITE" VerticalAlignment="Center"/>
<TextBlock Text=" Holes" Margin="3,0,0,0" Foreground="WHITE" VerticalAlignment="Center"/>
<CheckBox Content="Visible" IsChecked="{Binding Visible, Mode=TwoWay}" Foreground="WHITE" Margin="10,0,0,0" />
</StackPanel>
</StackPanel>
</Border>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Then, add this method to handle the grid loaded event:
private void StretchFrameworkElement(object sender, RoutedEventArgs e)
{
// found this method at: http://silverlight.net/forums/p/18918/70469.aspx#70469
FrameworkElement t = sender as FrameworkElement;
ContentPresenter p = VisualTreeHelper.GetParent(t) as ContentPresenter;
p.HorizontalAlignment = HorizontalAlignment.Stretch;
}