This question has been converted to Community Wiki and wiki locked because it is an example of a question that seeks a list of answers and appears to be popular enough to protect it from closure. It should be treated as a special case and should not be viewed as the type of question that is encouraged on this, or any Stack Exchange site, but if you wish to contribute more content to it then feel free to do so by editing this answer.
There are at least two different kinds of heat maps:
- Heatmaps representing concentration of points, and
- Heatmaps representing distributions of attribute values
Every method has advantages and problems, I'm afraid going into detail is far beyond this Q&A.
I'll try to list some methods and functions for QGIS and GRASS.
Concentration of points
If you are tracking movement of wildlife, vehicles, etc. it can be useful to assess regions with high concentration of location messages.
Tools: e.g. QGIS Heatmap plugin (available in versions > 1.7.x) or GRASS v.neighbors or v.kernel
Distributions of attribute values
Here, we're basically talking more or less about interpolation methods. Methods include:
- IDW
Depending on the implementation this can be global (using all available points in the set) or local (limited by number of points or maximum distance between points and interpolated position).
Tools: QGIS interpolation plugin (global), GRASS v.surf.idw or r.surf.idw (local)
- Splines
Again, huge number of possible implementations. B-Splines are popular.
Tools: GRASS v.surf.bspline
- Kriging
Statistical method with various sub-types.
Tools: GRASS v.krige (thanks to om_henners for the tip) or using R.