I found the same problem. When the first of the month is the day in question, it returns the second week. I modified it to this.
DECLARE @DATE DATETIME,@GETDATE DATETIME,@MONTHSTDATE DATETIME,@STARTDATE DATETIME
SET DATEFIRST 6
SET @STARTDATE='06/21/2010'
SELECT @MONTHSTDATE = CONVERT(DATETIME, CONVERT(VARCHAR(5),DATEPART(MM, @STARTDATE)) + '/01/' + CONVERT(VARCHAR(5),DATEPART(YYYY, @STARTDATE)) +' ' + '00:00:00 AM')
PRINT @MONTHSTDATE
PRINT DATEPART(DW,@MONTHSTDATE)
SET @getdate-2=@MONTHSTDATE - CASE WHEN DATEPART(DW,@MONTHSTDATE) = 1 THEN 0
ELSE (DATEPART(DW,@MONTHSTDATE)-8)
END
PRINT @getdate-2