Deleting a Content Type
For the record, the series of steps to delete a content type are as follows:
Site Actions -> Site Settings.
Under Galleries click Site content types.
Find the content type you wish to delete and click on it.
Click the Delete this site content type link.
At this point, the content type will either be deleted or you'll get an error message saying:
The content type is in use.
If you have errors turned on in the web.config (setting customErrors="Off" and CallStack="true") your error message may look a lot more like:
The content type is in use.
at Microsoft.SharePoint.SPContentTypeCollection.DeleteFromWeb(SPContentTypeId id, String strName)
at Microsoft.SharePoint.SPContentTypeCollection.Delete(SPContentType Id id)
at Microsoft.SharePoint.SPContentType.Delete()
at Microsoft.SharePoint.ApplicationPages.ManageContentTypePage.DeleteContent Type()
at Microsoft.SharePoint.ApplicationPages.ManageContentTypePage.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
In this case, you have two options, explore all the lists in the site collection and trying to figure out who's using the content type, OR running a stored procedure to determine the lists that are using the content type.
Finding Lists/Libraries using the Content Type
The first thing we'll need is access to the content database with a SQL Client like SQL Management Studio.
We'll also need a tool like the SharePoint Explorer for WSS 3.0 (needs to be run on the WSS server itself) to figure out what the SiteCollection ID is.
Run the SharePoint Explorer (SPE) on the server that's hosting the WSS site.
Find your Web Application with SPE and click on the Content Databases tab to figure out what the name of the SQL Server instance hosting the content and what the name of the content database is.

Click on the Site Collection itself and grab the ID property of the site, we'll need this when we run the stored procedure.

The last thing we'll need is the ContentTypeID of the content type we want to delete, the easiest way to get this is right out of the URL when you go to delete (or edit) the content type (Site Settings -> Site Content Types -> Click on your content type). Here's a sample URL:
http://sharepoint2007:8080/_layouts/ManageContentType.aspx?ctype=0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF39000C2EAB18225F0B43989F5B8F83CAF1A5&Source=%2F%5Flayouts%2Fmngctype%2Easpx
In this example, the Content Type ID is
0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF39000C2EAB18225F0B43989F5B8F83CAF1A5
Now we open up the SQL Server Management Studio, connect to the SQL instance and run the following stored procedure against our sites content database:
[proc_ListContentTypeInUse] [SiteCollectionId], [ContentTypeId]
What you get back is a result set showing all the lists that the given ContentType is being used in:

If you go and remove the content type from all those lists you should be good to go and that error message will go away.
You can also run the following query which will give you the SiteId, WebId, ListId of where the content type is in use:
SELECT SiteId,
sys.fn_varbintohexstr(ContentTypeId) AS ID,
WebId,
ListId,
IsFieldId
FROM ContentTypeUsage
WHERE (sys.fn_varbintohexstr(ContentTypeId)
LIKE '[ContentTypeID]%')