Ok, I think I may have a solution for you:
SELECT Users.Username, Users.LastName, Users.FirstName, Users.Email,
(SELECT PropertyValue FROM UserProfile WHERE
UserProfile.UserID = Users.UserID AND
UserProfile.PropertyDefinitionID = 26
) As Street,
(SELECT PropertyValue FROM UserProfile WHERE
UserProfile.UserID = Users.UserID AND
UserProfile.PropertyDefinitionID = 27
) As City,
(SELECT PropertyValue FROM UserProfile WHERE
UserProfile.UserID = Users.UserID AND
UserProfile.PropertyDefinitionID = 30
) As Zip,
(SELECT PropertyValue FROM UserProfile WHERE
UserProfile.UserID = Users.UserID AND
UserProfile.PropertyDefinitionID = 31
) As Home,
(SELECT PropertyValue FROM UserProfile WHERE
UserProfile.UserID = Users.UserID AND
UserProfile.PropertyDefinitionID = 32
) As Cell
FROM Users
WHERE (EXISTS (SELECT UserPortals.* FROM UserPortals WHERE UserPortals.UserId = Users.UserId AND UserPortals.PortalID = 0)
AND (EXISTS (SELECT UserRoles.* FROM UserRoles WHERE UserRoles.UserId = Users.UserId AND UserRoles.RoleId = 1))
AND (NOT EXISTS (SELECT UserRoles.* FROM UserRoles WHERE UserRoles.UserId = Users.UserId AND UserRoles.RoleId <> 1))
ORDER BY Users.Lastname
I'm not a SQL guru, so someone else may be able to give you a more performant query, but that seems like it should work. Basically it first filters out users who are NOT a member of Role #1 (Registered Users, I think, but you can check and change as necessary) and then filters out users who are ALSO a member of another role. With 3 subqueries it might be a little slower, so someone with more SQL experience may have a better suggestion, but it should work for you.
In this situation, where you are trying to bring back one record from a main table (Users) and then select certain records out of sub-tables (UserProfile, UserPortals, UserRoles, etc.) I find it easier to use sub-queries than fiddle with OUTER JOINs, but there may be a performance hit.