Since ReportRequest is persisted to its own table (as opposed to via SerializedObject) it can't be saved with a non-persisted ReportDefinition on it (that just gets dropped). When you reload the ReportRequest, it will have this null.

I can probably make this test for rd == null || rd.getId() == null.