Start by first WHAT do you want. On a per project basis, what is the latest issue that was updated BEFORE 2012. Ignore the project table at the moment..
select
JI.Project,
MAX( JI.Updated ) as LastUpdated
from
JiraIssue JI
group by
JI.Project
having
LastUpdated < '2012-01-01'
Now, this will give you all your primary information that you want. The HAVING clause is applied AFTER the group by to exclude any projects that are 2012 and future. You can't apply it as the WHERE clause as your sample described you didn't want anything that had a current (such as your ABC project) and only wanted the XYZ project.
Use this as a basis for getting the rest of your data by joining to the project table and joining AGAIN back to the JiraIssue table by that project/update combination
select
P.*,
JI2.*
from
( select
JI.Project,
MAX( JI.Updated ) as LastUpdated
from
JiraIssue JI
group by
JI.Project
having
LastUpdated < '2012-01-01' ) PreQuery
JOIN Project P
on PreQuery.Project = P.ID
JOIN JiraIssue JI2
on PreQuery.Project = JI2.Project
AND PreQuery.LastUpdated = JI2.Updated