In the latest release of the open-source geoprocessing platform WhiteboxTools (v. 0.7) I just added a new tool called ClassifyOverlapPoints that classifies or filters LAS points in regions of overlapping flight lines. If the --filter flag is specified, points from overlapping flightlines (i.e. later GPS times) are culled from the output point cloud. If this flag is left off, then all overlapping points are classified as such by setting the classification to 12 (see figures below, visualized using plas.io). This tool assumes that GPS data are available for the input LAS file. Scan angles are also utilized if present in the data set.
The library can be downloaded freely here and the source code for the tool can be found here. The User Manual contains information about how to use WhiteboxTools and the ClassifyOverlapPoints tool as do the tutorials. The tool can either be called through Python scripting (see below), or using the simple WhiteboxTools Runner user interface:
from WBT.whitebox_tools import WhiteboxTools
wbt = WhiteboxTools()
wbt.work_dir = "/path/to/data/"
in_file = "my_file.las"
out_file = "filtered.las"
wbt.classify_overlap_points(in_file, out_file, resolution=2.0, filter=False)
There is a QGIS plugin for the library, but this tool is not yet available in the plugin. Other related tools that could also be useful for this type of analysis include FilterLidarScanAngles, FlightlineOverlap, LidarPointDensity and LidarPointStats.