grouping people with the same score
Functions
Always write code as functions. Even when its just an example, writing code as a function gives it a name, and make you think in terms of that name.
Functions should be as simple as possible doing one thing only. (see rewrite)
Review

USE SEMICOLONS!!!
Don't add code that is redundant or superfluous. Eg  var secondPlace = null can be var secondPlace.
Keep it DRY. (Don't Repeat Yourself). You have a lot of repeated code that does similar or the same. Using function will reduce a lot of repeated code.
Use constants to define magic values. (see rewrite)
Use an Array to hold lists of strings then use Array.join to join them using the delimiter (see rewrite)
Use appropriate names. Names define the abstractions you use, poor naming make code harder to understand especially when a single abstract concept gets many names, or the same name represent multiple abstractions.

points As records should be results
key could be id.
amount could be score



Rewrite
Rewrite is just an example as there are many ways to do this.
Functions
The rewrite breaks the task into 3 parts.

groupByScore groups by score. Using a Map indexed by score to hold arrays of ids with each score. Returns the groups as the Map
sortByScore Takes the grouped results and sorts by score returning an array
resultsByPlace Takes an array of grouped results and returning an array of strings each containing the place, id, and score.

Constants
There are two constants that remove magic values from the code and moves them to one place at the top of the code.
One of the constants is defined as a function score2Str and created the string eg &quot; has 1 point&quot;
Util functions
Common tasks can be written as utility functions. These function can be part of a library of functions you can use within other projects. There is one Util function pluralize that adds a &quot;s&quot; when a value is not != 1. It is defined as a tagged template and can be used as a tagged template
pluralize` point${score}`

Or called as a function
pluralize([` point`], score)

As modules
Thus we get the code as
File strings/utils.jsm
const pluralize = (strs, value) =&gt; strs[0] + (value != 1 ? &quot;s&quot; : &quot;&quot;) + (strs[1] ? strs[1]: &quot;&quot;);
export {pluralize};

File studentResults.jsm
import {pluralize} from &quot;./strings/utils.jsm&quot;;

const PLACINGS = &quot;:First Place: ,:Second Place: ,:Thrid Place: &quot;.split(&quot;,&quot;);
const score2Str = score =&gt; &quot; has &quot; + score +  pluralize` point${score}`;

function groupByScore(students) {
    const scoreGroups = new Map();
    Object.entries(students).forEach(([id, score]) =&gt; {
        const group = scoreGroups.get(score);
        if (group) { group.push(id) }
        else { scoreGroups.set(score, [id]) }
    });
    return scoreGroups;
}    
function sortByScore(scoreGroups) {
    return [...scoreGroups.entries()].sort((gA, gB) =&gt; gB[0] - gA[0]);
}    
function resultsByPlace(sorted, cats = PLACINGS, scoreStr = score2Str) {
    var idx = 0;
    const results = [];
    for (const [score, group] of sorted) {
        const cat = idx &lt; cats.length ? cats[idx ++] : (idx ++, &quot;&quot;);
        results.push(...group.map(id =&gt; cat + id + scoreStr(score)));
    }
    return results;
}
export {groupByScore, sortByScore, resultsByPlace};

As running example.
As CodeReview snippets do not support modules below is a working example compatible with CodeReview snippets.
Code


const pluralize = (strs, value) =&gt; strs[0] + (value != 1 ? "s" : "") + (strs[1] ? strs[1]: "");
const tag = (tag, props = {}) =&gt; Object.assign(document.createElement(tag), props);
const append = (par, ...sibs) =&gt; sibs.reduce((p, sib) =&gt; (p.appendChild(sib), p), par);

// Rewrite
const studentScores = {'Adam': 3, 'Bill': 5,'Cindy': 4, 'Dafney': 5, 'Eric': 4, 'Fred': 5, 'Graham': 4, 'Hillary': 4, 'Ian': 3, 'Jill': 1, 'Kev': 0};
const PLACINGS = ":First Place: ,:Second Place: ,:Thrid Place: ".split(",");
const score2Str = score =&gt; " has " + score +  pluralize` point${score}`;

const results = resultsByPlace(sortByScore(groupByScore(studentScores)));
append(document.body, ...results.map(result =&gt; tag("div",{textContent: result})));
function groupByScore(students) {
    const scoreGroups = new Map();
    Object.entries(students).forEach(([id, score]) =&gt; {
        const group = scoreGroups.get(score);
        if (group) { group.push(id) }
        else { scoreGroups.set(score, [id]) }
    });
    return scoreGroups;
}
function sortByScore(scoreGroups) {
    return [...scoreGroups.entries()].sort((gA, gB) =&gt; gB[0] - gA[0]);
}
function resultsByPlace(sorted, cats = PLACINGS) {
    var idx = 0;
    const results = [];
    for (const [score, group] of sorted) {
        const cat = idx &lt; cats.length ? cats[idx ++] : (idx ++, "");
        results.push(...group.map(id =&gt; cat + id + score2Str(score)));
    }
    return results;
}