Dear Jon,
I saw that the problem with negative timephased still exists in MPXJ according to bug # 166. I noticed that the problem happens when the resource calendar has non-working days in the workweek. Note in the picture that the days Wednesday, Thursday and Friday are not working days within the period from 08/02/2010 to 10/29/2010 for the "Resource 10" calendar. Task 363 with 20-hour work begins on Monday (10/04/2010) and ends on Monday of the other week (10/11/2010). I followed the reading of the file and in the method "m_normaliser.normalise (m_calendar, m_data)" is not considering the non-working days of the work week, making the timephased negative. I used the .mpp file of bug # 166 to perform the test.
Just a quick update - I will be looking at this issue in the next few days.
The code to fix this is now available on GitHub and will form part of the next MPXJ release.