You could re-write these definitions like this
$context = SPContext.Current.Web and like this
$context = SPContext.Current.Site $myweb = $context.Web(guid/url) My understanding is these are two different contexts: one is the Web's context, the other is the Site Collection's context (which is then referencing one of its webs).
SPContext.Current This provides context for the current http request
SPContext.Current.Web works in the context of your current Web
SPContext.Current.Site.OpenWeb(guid/url) works in the context of your current Site Collection*, and you are opening a Web within that Site Collection. This context gives you the added scope to target other Webs too.
A dorky analogy would be Hotel Site Collection and the rooms are your Webs. You have a guest and a hotel manager. The guest's context is the room he's in, the manager's context is the whole hotel. The guest can only act on the room he is in. The manager can act on any room in the hotel, even while standing in the guest's room.
*Site Collection context should not be confused with Web context for the top-level Web of your site topology - that would still just be a Web context.
You can act on the lobby, gateway to all hotel rooms, but that doesn't make you a hotel manager.
As Current.Web you can only operate inside that Web. As Current.Site you have a broader scope, and can operate in the site collection and in multiple Webs under that Site Collection.
You may also benefit from these great answers on using web objects: