SO. An update for anyone who may come across this later.
Screen rotation:
I couldn't figure out a way for the QPlatformScreen subclass I was dealing with to continuously monitor the accelerometer and update the orientation QPlatformScreen::orientation(). I only saw a call into this function during initialization and not continuously as I had hoped. QGuiApplication::primaryScreen()->orientation() never called into the QPlatformScreen implementation so no querying of the accelerometer was done in the app.
Since I wasn't making progress this way, I went back to the original method of an outside process monitoring the accelerometer and notifying Qt App over DBus. Next, upon receipt of this message, I call QWindowSystemInterface::handleScreenOrientation(screen, orientation) (not part of the API, could change with versions) which allows the entire application to then know the orientation by querying QScreen::orienation(). QPlatformScreen then can do rotation itself in hardware based on current orientation.
Touch Event Rotation Handling:
Somewhat working, not complete. Installed an event filter on QApplication, caught touch events as they came in, created new QTouchEvent based on received events with transformed coordinates, and sent these new events along with QCoreApplication::sendEvent and returned true for handling of original event. Was baffled as when orientation was inverted, the filter wasn't activating anywidgets. Learned default behavior of events in QWidget is to synthesize mouse events if a QTouchEvent goes unhandled, and this is what is actually handled in QWidgets. So modified filter to only work on mouse events: this required x and y transformations of course but also setting source to MouseEventSynthesizedByApplication so as it was passed to each widget it wasn't continually transformed (if synthed by app, don't do x/y transformation again).
Gestures are still broken, as I believe I still need to handle touch event transformation, but without breaking the synthesis of QMouseEvents by Qt. (PanGesture still is recognized when inverted, but pans in the incorrect direction).
If anyone has suggestions on this last part, let me know!