I'm only parsing the most generic message from the gps_reader application, which greatly simplifies the source code. In addition, I noticed that when the GPS loses a lock, the filter lat/lon quickly goes back to 0/0, so for now the filter isn't run unless the GPS indicates that PDOP isn't maxed out.
Next up is going to be figuring out the power systems to make this portable. I have a bunch of unprotected 18650 batteries, but my cheap ebay electronics don't get all the power out of the batteries that they could. I need to research higher performance boost controllers and battery protection ICs. In addition, I don't want to overcharge these batteries by plugging a USB cable into the Pi and pushing current backwards though a boost controller and battery protector.